天天看點

老闆下了死指令,要把日志系統切換到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