天天看点

老板下了死命令,要把日志系统切换到Logback(3)

可以确认一下内容,发现三个 appender 都在。

老板下了死命令,要把日志系统切换到Logback(3)

但是呢,转换后的文件并不能直接使用,需要稍微做一些调整,因为:

第一,日志的格式化有细微的不同,Logback 中没有 %l。

第二,RollingFileAppender 需要指定 RollingPolicy 和 TriggeringPolicy,前者负责日志的滚动功能,后者负责日志滚动的时机。如果 RollingPolicy 也实现了 TriggeringPolicy 接口,那么只需要设置 RollingPolicy 就好了。

TimeBasedRollingPolicy 和 SizeAndTimeBasedRollingPolicy 是两种最常用的滚动策略。

TimeBasedRollingPolicy 同时实现了 RollingPolicy 与 TriggeringPolicy 接口,因此使用 TimeBasedRollingPolicy 的时候就可以不指定 TriggeringPolicy。

TimeBasedRollingPolicy 可以指定以下属性:

fileNamePattern,用来定义文件的名字(必选项)。它的值应该由文件名加上一个 %d 的占位符。%d 应该包含 java.text.SimpleDateFormat 中规定的日期格式,缺省是 yyyy-MM-dd。滚动周期是通过 fileNamePattern 推断出来的。

maxHistory,最多保留多少数量的日志文件(可选项),将会通过异步的方式删除旧的文件。比如,你指定按月滚动,指定 maxHistory = 6,那么 6 个月内的日志文件将会保留,超过 6 个月的将会被删除。

totalSizeCap,所有日志文件的大小(可选项)。超出这个大小时,旧的日志文件将会被异步删除。需要配合 maxHistory 属性一起使用,并且是第二条件。

来看下面这个 RollingFileAppender 配置:

<appender name="D" class="ch.qos.logback.core.rolling.RollingFileAppender">

   <file>debug.log</file>

   <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

       <!--            按天滚动 -->

       <fileNamePattern>debug.%d{yyyy-MM-dd}.log</fileNamePattern>

       <!--            保存 30 天的历史记录,最大大小为 30GB -->

       <maxHistory>30</maxHistory>

       <totalSizeCap>3GB</totalSizeCap>

   </rollingPolicy>

   <encoder>

       <pattern>%relative [%thread] %level %logger{35} - %msg%n</pattern>

   </encoder>

</appender>

基于按天滚动的文件策略,最多保留 30 天,最大大小为 30G。

SizeAndTimeBasedRollingPolicy 比 TimeBasedRollingPolicy 多了一个日志文件大小设定的属性:maxFileSize,其他完全一样。

基于我们对 RollingPolicy 的了解,可以把 logback-test.xml 的内容调整为以下内容:

<configuration>

   <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">

       <Target>System.out</Target>

       <encoder>

           <pattern>%d{HH:mm:ss.SSS} [%thread] %level %logger{36} - %msg%n</pattern>

       </encoder>

   </appender>

   <Append>true</Append>

   <File>debug.log</File>

       <!--            按天轮转 -->

       <pattern>%relative [%thread] %-5level %logger{35} - %msg%n</pattern>

   <appender name="E" class="ch.qos.logback.core.rolling.RollingFileAppender">

       <File>error.log</File>

       <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

           <!--            按天轮转 -->

           <fileNamePattern>error.%d{yyyy-MM-dd}.log</fileNamePattern>

           <!--            保存 30 天的历史记录,最大大小为 30GB -->

           <maxHistory>30</maxHistory>

           <totalSizeCap>3GB</totalSizeCap>

       </rollingPolicy>

           <pattern>%d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n</pattern>

       <filter class="ch.qos.logback.classic.filter.ThresholdFilter">

           <level>ERROR</level>

       </filter>

   <root level="debug">

       <appender-ref ref="stdout"/>

       <appender-ref ref="D"/>

       <appender-ref ref="E"/>

   </root>

</configuration>

修改 Test 类的内容:

public class Test {

   static Logger logger = LoggerFactory.getLogger(Test.class);

   public static void main(String[] args) {

       logger.debug("logback");

       logger.error("logback");

   }

}

运行后,可以在 target 目录下看到两个文件:debug.log 和 errror.log。

老板下了死命令,要把日志系统切换到Logback(3)
到此为止,项目已经从 Log4j 切换到 Logback 了,过程非常的丝滑顺畅,嘿嘿。

04、Logback 手册

Logback 的官网上是有一份手册的,非常详细,足足 200 多页,只不过是英文版的。小伙伴们可以看完我这篇文章入门实操的 Logback 教程后,到下面的地址看官方手册。

http://logback.qos.ch/manual/index.html

如果英文阅读能力有限的话,可以到 GitHub 上查看雷锋翻译的中文版:

https://github.com/itwanger/logback-chinese-manual

当然了,还有一部分小伙伴喜欢看离线版的 PDF,我已经整理好了:

链接:https://pan.baidu.com/s/16FrbwycYUUIfKknlLhRKYA 密码:bptl