Spring Boot 전체 로그 설정

앞에서 말 하 다
이곳 일 지 는 두 가지 로 나 뉜 다.하 나 는 tomcat 의 출력 (시스템) 로그 이 고, 하 나 는 자신 이 정의 한 로그 입 니 다.
시스템 로그 설정
목표.
springboot 이 요청 을 받 았 을 때 파일 에 로 그 를 기록 합 니 다.
이루어지다
녹색 잎 application.properties 프로필 에 추가 할 설정 만 있 으 면 됩 니 다.
system.root.path=D:
server.tomcat.basedir=${system.root.path}/log/tomcat_log
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.pattern=%t %a "%r" %s %S (%D ms)

효과.
자동 으로 D: / log / tomcat로그 디 렉 터 리 에서 요청 한 로 그 를 생 성 합 니 다.
[26/Jul/2017:15:42:19 +0800] 0:0:0:0:0:0:0:1 "GET /assets/img/nav-expand.png HTTP/1.1" 404 - (72 ms)
[26/Jul/2017:15:42:23 +0800] 0:0:0:0:0:0:0:1 "GET /assets/img/nav-expand.png HTTP/1.1" 404 - (6 ms)
[26/Jul/2017:15:42:24 +0800] 0:0:0:0:0:0:0:1 "GET /view/recommendedSetting HTTP/1.1" 200 - (4 ms)
[26/Jul/2017:15:42:24 +0800] 0:0:0:0:0:0:0:1 "GET /assets/css/bootstrap.css.map HTTP/1.1" 404 - (5 ms)
[26/Jul/2017:15:42:24 +0800] 0:0:0:0:0:0:0:1 "GET /assets/img/nav-expand.png HTTP/1.1" 404 - (6 ms)
[26/Jul/2017:15:42:25 +0800] 0:0:0:0:0:0:0:1 "GET /assets/img/nav-expand.png HTTP/1.1" 404 - (5 ms)
[26/Jul/2017:15:42:26 +0800] 0:0:0:0:0:0:0:1 "GET /view/blank.html HTTP/1.1" 404 - (54 ms)
[26/Jul/2017:15:42:29 +0800] 0:0:0:0:0:0:0:1 "GET /view/blank.html HTTP/1.1" 404 - (7 ms)
[26/Jul/2017:15:42:29 +0800] 0:0:0:0:0:0:0:1 "GET /view/blank.html HTTP/1.1" 404 - (4 ms)
[26/Jul/2017:15:42:30 +0800] 0:0:0:0:0:0:0:1 "GET /view/blank.html HTTP/1.1" 404 - (16 ms)
[26/Jul/2017:15:42:30 +0800] 0:0:0:0:0:0:0:1 "GET /view/blank.html HTTP/1.1" 404 - (4 ms)
[26/Jul/2017:15:42:31 +0800] 0:0:0:0:0:0:0:1 "GET /assets/css/bootstrap.css.map HTTP/1.1" 404 - (4 ms)
[26/Jul/2017:15:42:32 +0800] 0:0:0:0:0:0:0:1 "GET /assets/img/nav-expand.png HTTP/1.1" 404 - (3 ms)
[26/Jul/2017:15:42:33 +0800] 0:0:0:0:0:0:0:1 "GET /view/form_component.html HTTP/1.1" 404 - (9 ms)

사용자 정의 로그 설정 (logback)
목표.
업무 논리 코드 를 쓸 때 출력 로그 의 내용 을 스스로 정의 해 야 합 니 다.
이루어지다
  • 디 렉 터 리 아래 파일 새로 만 들 기 resources
  • 다음 내용 을 logback-spring.xml 에 쓴다.
  • 
    <configuration debug="false">
    
        <contextName>Logback For demo MobilecontextName>
    
        
        
        <property name="LOG_HOME" value="D:/log/tomcat_log" />
    
        
        
       
    
    
        
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
            
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{80} -%msg%npattern>
            encoder>
            <target>System.outtarget>
        appender>
    
        
        <appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                
                <FileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}.logFileNamePattern>
                
                <MaxHistory>180MaxHistory>
            rollingPolicy>
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{25} -%msg%npattern>
            encoder>
            
            <triggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                <MaxFileSize>20MBMaxFileSize>
            triggeringPolicy>
        appender>
    
        
        
        <logger name="com" level="ERROR">
            <appender-ref ref="ROLLING_FILE" />
        logger>
    
        
        <root level="INFO">
            <appender-ref ref="STDOUT" />
        root>
    
    configuration>

    3. 어떻게 사용
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    public class ViewController
    
        //       ,        ,            。           
        private static final Logger log = LoggerFactory.getLogger(ViewController.class);
    
        //   
        @RequestMapping(value = "/index", method = RequestMethod.GET)
        public String index(HttpServletRequest request) {
            //    
            log.error("           ");
    
            return "index";
        }
    }

    효과.
    설정 한 로그 디 렉 터 리 에 파일 이 생 성 되 어 있 습 니 다. 정 의 된 로그 가 있 습 니 다.
    확장 (전역 이상 캡 처 및 로그 출력)
    목표.
    우리 서버 가 요청 을 처리 할 때 우리 가 포착 하지 못 한 이상 이 생 길 수 있 습 니 다.그러면 우리 가 해 야 할 일 은 전체적인 이상 캡 처 를 설정 하고 이상 한 내용 (스 택 정보) 을 날짜 파일 에 출력 하 는 것 입 니 다.
    이루어지다
    1. 클래스 파일 새로 만 들 기 logback-spring.xml 는 다음 과 같은 내용 을 기록 합 니 다.
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.web.bind.annotation.ControllerAdvice;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    import javax.servlet.http.HttpServletRequest;
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    
    /**
     * User: Qiu Nick
     * Date: 2017-07-26
     * Time: 15:49
     * Description:       
     */
    @ControllerAdvice
    public class GlobalExceptionHandler {
    
        //       
        private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class);
    
        @ExceptionHandler(value = Exception.class)
        public void handleGlobalException(HttpServletRequest req, Exception ex) {
    
            //            
            ByteArrayOutputStream buf = new ByteArrayOutputStream();
            ex.printStackTrace(new java.io.PrintWriter(buf, true));
            String  expMessage = buf.toString();
            try {
                buf.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
    
            //     
            log.error("GlobalExceptionHandler,    :"+ ex.getMessage() + ";eString:" + expMessage);
        }
    }
    

    효과.
    인쇄 된 로 그 를 통 해 오류 가 발생 한 곳 을 찾 을 수 있어 서 매우 편리 합 니 다.(여기 서 0 을 제외 한 이상 을 시 뮬 레이 션 했 습 니 다. - ViewController. java: 72)
    ===2017-07-26 16:43:45.018 ERROR com.demo.config.GlobalExceptionHandler Line:46  - GlobalExceptionHandler,    :/ by zero;eString:java.lang.ArithmeticException: / by zero
        at com.truesun.controller.ViewController.slideshowSetting(ViewController.java:72)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
        at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133)
        at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97)
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
        at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
        at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
        at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:105)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:478)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
        at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
        at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:799)
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1455)
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:748)

    좋은 웹페이지 즐겨찾기