1 Logback的引入
前面介紹了Commons Logging和Log4j這一對好基友,它們一個負責充當日誌API,一個負責實現日誌底層,搭配使用非常便於開發。
有的童鞋可能還聽說過SLF4J和Logback。這兩個東東看上去也像日誌,它們又是啥?
其實SLF4J類似於Commons Logging,也是一個日誌接口,而Logback類似於Log4j,是一個日誌的實現。
爲什麼有了Commons Logging和Log4j,又會蹦出來SLF4J和Logback?
這是因爲Java有着非常悠久的開源歷史,不但OpenJDK本身是開源的,而且我們用到的第三方庫,幾乎全部都是開源的。開源生態豐富的一個特定就是,同一個功能,可以找到若干種互相競爭的開源庫。
因爲對Commons Logging的接口不滿意,有人就搞了SLF4J。因爲對Log4j的性能不滿意,有人就搞了Logback。
2 Logback的配置文件
在classpath或者src或者resource文件夾下(即源根文件夾下)創建如logback-spring.xml的配置文件,具體代碼如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- %m輸出的信息,%p日誌級別,%t線程名,%d日期,%c類的全名,%i索引【從數字0開始遞增】,,, -->
<!-- appender是configuration的子節點,是負責寫日誌的組件。 -->
<!-- ConsoleAppender:把日誌輸出到控制檯 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d %p (%file:%line\)- %m%n</pattern>
<!-- 控制檯也要使用UTF-8,不要使用GBK,否則會中文亂碼 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- RollingFileAppender:滾動記錄文件,先將日誌記錄到指定文件,當符合某個條件時,將日誌記錄到其他文件 -->
<!-- 以下的大概意思是:1.先按日期存日誌,日期變了,將前一天的日誌文件名重命名爲XXX%日期%索引,新的日誌仍然是demo.log -->
<!-- 2.如果日期沒有發生變化,但是當前日誌的文件大小超過1KB時,對當前日誌進行分割 重命名-->
<appender name="demolog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>log/demo.log</File>
<!-- rollingPolicy:當發生滾動時,決定 RollingFileAppender 的行爲,涉及文件移動和重命名。 -->
<!-- TimeBasedRollingPolicy: 最常用的滾動策略,它根據時間來制定滾動策略,既負責滾動也負責出發滾動 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 活動文件的名字會根據fileNamePattern的值,每隔一段時間改變一次 -->
<!-- 文件名:log/demo.2017-12-05.0.log -->
<fileNamePattern>log/demo.%d.%i.log</fileNamePattern>
<!-- 每產生一個日誌文件,該日誌文件的保存期限爲30天 -->
<maxHistory>30</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- maxFileSize:這是活動文件的大小,默認值是10MB,測試時可改成1KB看效果 -->
<maxFileSize>1KB</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.liyan爲根包,也就是只要是發生在這個根包下面的所有日誌操作行爲的權限都是DEBUG -->
<!-- 級別依次爲【從高到低】:FATAL > ERROR > WARN > INFO > DEBUG > TRACE -->
<logger name="com.liyan" level="DEBUG">
<appender-ref ref="demolog" />
</logger>
</configuration>
3 加載配置文件
3.1 springboot中
在application.properties文件中加入以下代碼即可
#===========加載日誌配置文件==============
logging.config=classpath:logback-spring.xm
l
3.2 Spring中
在web.xml文件中配置相應的監聽器即可
<context-param>
<param-name>logbackConfigLocation</param-name>
<param-value>classpath:logback.xml</param-value>
</context-param>
<listener>
<listener-class>ch.qos.logback.ext.spring.web.LogbackConfigListener</listener-class>
</listener>