07.`logback`日志

本文详细介绍了如何在SpringBoot项目中配置Logback,包括排除log4j依赖、配置不同级别的日志输出、使用异步日志以及设置日志文件的滚动策略。适用于开发和生产环境的日志管理。
1. 核心依赖

spring boot已经集成了logback,不用导依赖,只要导入了spring-boot-starter即可,可以排除掉log4j

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-to-slf4j</artifactId>
        </exclusion>
    </exclusions>
</dependency>
2. 配置文件
  1. 主配置文件

    logging:
      level:
        # 配置打印mybatis的sql语句
        com.test.shop: debug
      config: classpath:logback-spring-dev.xml
    
  2. logback配置文件

    1. logback-spring-dev.xml → 开发环境

      <?xml version="1.0" encoding="UTF-8"?>
      <!-- 
          scan: 当配置文件被修改后, 将会被重新载入。
          scanPeriod:配置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
          debug: 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 
      -->
      <configuration scan="true" scanPeriod="60 seconds">
          <!-- 名字随便起,这是开发环境的所以起名为develop -->
          <contextName>develop</contextName>
          
          <!-- 
              定义日志存放路径,通过${LOG_PATH}的方式可以引用该变量插入到logback的上下文
              当前盘符下的webapp/log/,如D:webapp/log/
              如果是Linux,则是根目录下的/webapp/log/
          -->
          <property name="LOG_PATH" value="/webapp/log/" />
          <!-- 定义日志输出格式 -->
          <property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %5p --- [%t] %-40.40logger{39} : %m%n"/>
      
          <!--1. 输出到控制台-->
          <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
              <encoder>
                  <Pattern>${LOG_PATTERN}</Pattern>
                  <charset>utf-8</charset>
              </encoder>
          
              <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                  <level>debug</level>
              </filter>
          </appender>
      
          <!-- info日志文件 -->
          <appender name="FILE-INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
              <!--常规日志文件,路径/文件名-->
              <file>${LOG_PATH}/log-info.log</file>
              <!-- 日志记录的滚动策略,按日期、大小进行记录 -->
              <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                  <!--归档日志文件-->
                  <fileNamePattern>${LOG_PATH}/info/log-info.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
                  <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                      <maxFileSize>30MB</maxFileSize>
                  </timeBasedFileNamingAndTriggeringPolicy>
                  <!-- 日志保留天数 -->
                  <maxHistory>15</maxHistory>
              </rollingPolicy> 
              <append>true</append>
              <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                  <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{32} Line:%-3L - %msg%n</pattern>
                  <charset>utf-8</charset>
              </encoder>
              <filter class="ch.qos.logback.classic.filter.LevelFilter">
                  <level>info</level>
              </filter>
          </appender>
          
          <!-- warn 日志文件 -->
          <appender name="FILE-WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
              <!-- warn 日志文件 -->
              <file>${LOG_PATH}/log-warn.log</file>
              <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                  <!--归档日志文件-->
                  <fileNamePattern>${LOG_PATH}/warn/log-warn.%d{yyyy-MM}.%i.log</fileNamePattern>
                  <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                      <maxFileSize>30MB</maxFileSize>
                  </timeBasedFileNamingAndTriggeringPolicy>
                  <maxHistory>15</maxHistory>
              </rollingPolicy>
              <append>true</append>
              <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                  <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger Line:%-3L - %msg%n</pattern>
                  <charset>utf-8</charset>
              </encoder>
              <filter class="ch.qos.logback.classic.filter.LevelFilter">
                  <level>WARN</level>
                  <onMatch>ACCEPT</onMatch>
                  <onMismatch>DENY</onMismatch>
              </filter>
          </appender>
          
          <!-- error 归档日志文件 -->
          <appender name="FILE-ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
              <!-- error 归档日志文件 -->
              <file>${LOG_PATH}/log-err.log</file>
              <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                  <!-- error 归档日志文件 -->
                  <fileNamePattern>${LOG_PATH}/err/log-err.%d{yyyy-MM}.%i.log</fileNamePattern>
                  <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                      <maxFileSize>30MB</maxFileSize>
                  </timeBasedFileNamingAndTriggeringPolicy>
                  <maxHistory>15</maxHistory>
              </rollingPolicy>
              <append>true</append>
              <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                  <pattern>${LOG_PATTERN}</pattern>
                  <charset>utf-8</charset>
              </encoder>
              <filter class="ch.qos.logback.classic.filter.LevelFilter">
                  <level>ERROR</level>
                  <onMatch>ACCEPT</onMatch>
                  <onMismatch>DENY</onMismatch>
              </filter>
          </appender>
          
          <!--请求日志文件-->
          <appender name="HTTP-INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
              <file>${LOG_PATH}/log-http.log</file>
              <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                  <fileNamePattern>${LOG_PATH}/http/log-http.%d{yyyy-MM}.%i.log</fileNamePattern>
                  <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                      <maxFileSize>30MB</maxFileSize>
                  </timeBasedFileNamingAndTriggeringPolicy>
                  <maxHistory>15</maxHistory>
              </rollingPolicy>
              <append>true</append>
              <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                  <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger Line:%-3L - %msg%n</pattern>
                  <charset>utf-8</charset>
              </encoder>
              <filter class="ch.qos.logback.classic.filter.LevelFilter">
                  <level>info</level>
              </filter>
          </appender>
          
          <!-- 异步输出,异步的log片段必须在同步段后面,否则不起作用 -->
          <appender name="FILE-INFO-ASYNC" class="ch.qos.logback.classic.AsyncAppender">
              <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
              <discardingThreshold>0</discardingThreshold>
              <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
              <queueSize>256</queueSize>
              <!-- 添加附加的appender,最多只能添加一个 -->
              <appender-ref ref="FILE-INFO"/>
          </appender>
          
          <appender name="FILE-WARN-ASYNC" class="ch.qos.logback.classic.AsyncAppender">
              <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
              <discardingThreshold>0</discardingThreshold>
              <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
              <queueSize>256</queueSize>
              <!-- 添加附加的appender,最多只能添加一个 -->
              <appender-ref ref="FILE-WARN"/>
          </appender>
          
          <appender name="FILE-ERROR-ASYNC" class="ch.qos.logback.classic.AsyncAppender">
              <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
              <discardingThreshold>0</discardingThreshold>
              <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
              <queueSize>256</queueSize>
              <!-- 添加附加的appender,最多只能添加一个 -->
              <appender-ref ref="FILE-ERROR"/>
          </appender>
          
          <!-- 根日志,用来指定最基础的日志输出级别,只有一个level属性。-->
          <root level="info">
              <!-- 标识这个appender将会添加到这个loger -->
              <appender-ref ref="STDOUT"/>
              <appender-ref ref="FILE-INFO-ASYNC"/>
              <appender-ref ref="FILE-WARN-ASYNC"/>
              <appender-ref ref="FILE-ERROR-ASYNC"/>
          </root>
          
          <!-- 自定义包的日志级别 -->
      	<logger name="cn.zs" level="info"/>
      </configuration>
      
    2. 说明

      1. %d:日期转换,花括号中指定日期的格式。
      2. %-4relative:该条日志输出的时间,这个时间是相对于服务器启动到打印出这条日志的相对时间,4表示时间占用的宽度。
      3. %-5level:日志的级别,日志总共5个级别,分别是debug,info,warn,error,fatal,从左往右日志级别越高,5表示日志级别占用的字符宽度。
      4. %thread:该日志所属的线程。
      5. %logger{32}:输出该日志信息的类,32表示包的层级。
      6. %msg:日志信息。
      7. %n::换行。
    3. 注意

      1. 生产环境不要打印到控制台
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值