logback 入門
實戰,我的原則是,先會使用,然後再來剖析下源碼瞭解下原理
一、代碼
1、pom.xml
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
2、logback.xml
<configuration scan="true" scanPeriod="60 second" debug="false">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread%X{sourceThread}]%logger{24} - %msg%n</pattern>
</encoder>
</appender>
<logger name="indi" level="info" additivity="false">
<appender-ref ref="STDOUT"/>
</logger>
<root level="DEBUG">
<appender-ref ref="STDOUT"/>
</root>
</configuration>
3、Demo類,注意 package 路徑
package indi.sword.logback.demo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author jeb_lin
* 2:53 PM 01/03/2019
*/
public class Demo {
public static void main(String[] arg){
Logger logger = LoggerFactory.getLogger(Demo.class);
logger.debug("debug");
logger.info("info");
logger.warn("warn");
logger.error("error");
}
}
4、運行 Main 方法:輸出到控制檯:
2019-03-01 16:48:17 INFO [main]i.s.logback.demo.Demo - info
2019-03-01 16:48:17 WARN [main]i.s.logback.demo.Demo - warn
2019-03-01 16:48:17 ERROR [main]i.s.logback.demo.Demo - error
Process finished with exit code 0
5、輸出到文件(xml加上appender代碼)
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/Users/Documents/temp/logs/rolling01.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/var/log/admin-manage/log.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
<maxHistory>7</maxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{MM/dd/yyyy HH:mm:ss} %-5level ${version} [%thread]%logger{16} - %msg%n
</pattern>
</encoder>
</appender>
<logger name="indi" level="info" additivity="false">
<appender-ref ref="FILE"/>
<appender-ref ref="STDOUT"/>
</logger>
6、繼續執行 main 方法,可以看到剛剛控制檯的輸出寫到了 /Users/Documents/temp/logs/rolling01.log
7、重點注意日誌級別Level,從Log4j過來的要注意一下(多了個 Trace 少了個 fatal)
log4j :DEBUG、INFO、WARN、ERROR、FATAL
logback : TRACE、DEBUG、INFO、WARN、ERROR
二、解釋XML含義
1、root 根結點(根Logger)
<logger name="indi" level="info" additivity="false">
<appender-ref ref="FILE"/>
<appender-ref ref="STDOUT"/>
</logger>
修改爲:
<logger name="indi" />-
2、控制檯輸出了:(多了句 debug),未輸出到文件
2019-03-01 17:17:21 DEBUG [main]i.s.logback.demo.Demo - debug
2019-03-01 17:17:21 INFO [main]i.s.logback.demo.Demo - info
2019-03-01 17:17:21 WARN [main]i.s.logback.demo.Demo - warn
2019-03-01 17:17:21 ERROR [main]i.s.logback.demo.Demo - error
原因:
a、 “indi” 的logger 未設置Level,那麼繼承父類 root 的 debug(剛剛例子“indi”自己設置的是 info),打印了4條記錄
b、 “indi”的“additivity”未設置,默認true,也就是父類幫他打印。
c、他自己未設置 appender ,那麼他自己不打印,他爸爸幫他打印就行。
c、父類 root 只打印到 STOUT 沒打印到 FILE,所以就都聽爸爸的。
3、additivity屬性測試 (additivity 設置爲 true)
<logger name="indi" level="info" additivity="true">
<appender-ref ref="STDOUT"/>
</logger>
<root level="DEBUG">
<appender-ref ref="STDOUT"/>
</root>
控制檯輸出:(因爲定義了兩個 appender-ref ,所以打印出來了兩份)
2019-03-01 17:36:01 INFO [main]i.s.logback.demo.Demo - info
2019-03-01 17:36:01 INFO [main]i.s.logback.demo.Demo - info
2019-03-01 17:36:01 WARN [main]i.s.logback.demo.Demo - warn
2019-03-01 17:36:01 WARN [main]i.s.logback.demo.Demo - warn
2019-03-01 17:36:01 ERROR [main]i.s.logback.demo.Demo - error
2019-03-01 17:36:01 ERROR [main]i.s.logback.demo.Demo - error
4、注意 logger name=“indi”,indi表示包名字,包路徑越少範圍越大,“indi”表示類的package爲indi.*的logger都由他管理。比如剛剛那個Demo類,package爲package indi.sword.logback.demo;就在 indi下面。
5、root 是所有logger的終極父類,所以我們測試下:logback.xml ,去掉其他logger
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 second" debug="false">
<!-- 控制檯輸出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread%X{sourceThread}]%logger{24} - %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="STDOUT"/>
</root>
</configuration>
6、運行 Demo 類的Main方法,控制檯輸出:
2019-03-01 18:32:37 DEBUG [main]i.s.logback.demo.Demo - debug
2019-03-01 18:32:37 INFO [main]i.s.logback.demo.Demo - info
2019-03-01 18:32:37 WARN [main]i.s.logback.demo.Demo - warn
2019-03-01 18:32:37 ERROR [main]i.s.logback.demo.Demo - error
=============== 講解結束 ===============
下篇預告:logback 的優點與代碼剖析。