SpringBoot2.x整合logback 實現自動打印日志


SpringBoot默認使用logbook日志框架。

一、引入架包

 

      <dependencies>
           <dependency>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-starter-web</artifactId>
           </dependency>
           <dependency>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-starter</artifactId> 
           </dependency>
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-aop</artifactId>
      </dependency>
     </dependencies>

 

二、創建logback-spring.xml

 

<configuration>
    <!-- %m輸出的信息, %p日志級別, %t線程名, %d日期, %c類的全名, %i索引 -->
    <!-- appender是configuration的子節點,是負責寫日志的組件 -->
    <!-- ConsoleAppender把日志輸出到控制台 -->
<!--    <property name="CONSOLE_LOG_PATTERN" -->
<!--               value="%date{yyyy-MM-dd HH:mm:ss} | %highlight(%-5level) | %boldYellow(%thread) | %boldGreen(%logger) | %msg%n"/> -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <!--<pattern>${CONSOLE_LOG_PATTERN}</pattern> -->
            <pattern>%date{yyyy-MM-dd HH:mm:ss} %highlight(%-5level) (%file:%line\)- %m%n</pattern>
            <!-- 控制台也要使用utf-8,不要使用gbk -->
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- RollingFileAppender:滾動記錄文件,先將日志記錄到指定文件,當符合某個條件時,將日志記錄到其他文件 -->
    <!-- 1.先按日期存日志,日期變了,將前一天的日志文件名重命名為xxx%日期%索引,新的日志仍然是sys.log -->
    <!-- 2.如果日期沒有變化,但是當前日志文件的大小超過1kb時,對當前日志進行分割 重名名 -->
    <appender name="syslog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${catalina.base}/mylog/sys.log</File>
        <!-- rollingPolicy:當發生滾動時,決定 RollingFileAppender 的行為,涉及文件移動和重命名。 -->  
        <!-- TimeBasedRollingPolicy: 最常用的滾動策略,它根據時間來制定滾動策略,既負責滾動也負責出發滾動 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 活動文件的名字會根據fileNamePattern的值,每隔一段時間改變一次 -->  
            <!-- 文件名:log/sys.2017-12-05.0.log -->
            <fileNamePattern>${catalina.base}/mylog/sys.%d.%i.log</fileNamePattern>
            <!-- 每產生一個日志文件,該日志文件的保存期限,以天為單位 -->
            <maxHistory></maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy  class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">      
                <!-- maxFileSize:這是活動文件的大小,默認值是10MB -->    
                <maxFileSize>64KB</maxFileSize>      
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder>      
            <!-- pattern節點,用來設置日志的輸入格式 -->  
            <pattern>      
                %d %p (%file:%line\)- %m%n    
            </pattern>      
            <!-- 記錄日志的編碼 -->  
            <charset>UTF-8</charset> <!-- 此處設置字符集 -->     
        </encoder>
    </appender>
    <!-- 控制台日志輸出級別 -->
    <root level="info">
        <appender-ref ref="STDOUT" />
    </root>
    <!-- 指定項目中某個包,當有日志操作行為時的日志記錄級別 -->  
    <!-- com.appley為根包,也就是只要是發生在這個根包下面的所有日志操作行為的權限都是DEBUG -->  
    <!-- 級別依次為【從高到低】:FATAL > ERROR > WARN > INFO > DEBUG > TRACE  -->  
    <logger name="com.liangjian" level="DEBUG">
        <appender-ref ref="syslog" />      
    </logger>
</configuration>

 

 

 

三、配置類WebLogAspect

 

/**
 *  自動打印日志
 */
@Aspect
@Component
public class WebLogAspect {
    private static final Logger logger = LoggerFactory.getLogger(WebLogAspect.class);

    
  //切入點
    @Pointcut("execution(public * com.liangjian.controller.*.*(..))")
    public void webLog() {
    }

    @Before("webLog()")
    public void doBefore(JoinPoint joinPoint) throws Throwable {
        // 接收到請求,記錄請求內容
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        // 記錄下請求內容
        logger.info("URL : " + request.getRequestURL().toString());
        logger.info("HTTP_METHOD : " + request.getMethod());
        logger.info("IP : " + request.getRemoteAddr());
        Enumeration<String> enu = request.getParameterNames();
        while (enu.hasMoreElements()) {
            String name = (String) enu.nextElement();
            logger.info("name:{},value:{}", name, request.getParameter(name));
        }
    }


    @AfterReturning(returning = "ret", pointcut = "webLog()")
    public void doAfterReturning(Object ret) throws Throwable {
        // 處理完請求,返回內容
        logger.info("RESPONSE : " + ret);
    }

}

 

四、application.xml文件

#日志文件
logging:
  config: classpath:logback-spring.xml

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM