【日誌】logback入門

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 的優點與代碼剖析。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章