Logback的配置介紹:
1、Logger、appender及layout
Logger作為日誌的記錄器,把它關聯到應用的對應的context上後,主要用於存放日誌物件,也可以定義日誌型別、級別。
Appender主要用於指定日誌輸出的目的地,目的地可以是控制檯、檔案、遠端套接字伺服器、 MySQL、 PostreSQL、 Oracle和其他資料庫、 JMS和遠端UNIX Syslog守護程式等。
Layout 負責把事件轉換成字串,格式化的日誌資訊的輸出。
2、logger context
各個logger 都被關聯到一個 LoggerContext,LoggerContext負責製造logger,也負責以樹結構排列各 logger。其他所有logger也通過org.slf4j.LoggerFactory 類的靜態方法getLogger取得。 getLogger方法以 logger 名稱為引數。用同一名字呼叫LoggerFactory.getLogger 方法所得到的永遠都是同一個logger物件的引用。
3、有效級別及級別的繼承
Logger 可以被分配級別。級別包括:TRACE、DEBUG、INFO、WARN 和 ERROR,定義於 ch.qos.logback.classic.Level類。如果 logger沒有被分配級別,那麼它將從有被分配級別的最近的祖先那裡繼承級別。root logger 預設級別是 DEBUG。
4、列印方法與基本的選擇規則
列印方法決定記錄請求的級別。例如,如果 L 是一個 logger 例項,那麼,語句 L.info("..")是一條級別為 INFO 的記錄語句。記錄請求的級別在高於或等於其 logger 的有效級別時被稱為被啟用,否則,稱為被禁用。記錄請求級別為 p,其logger的有效級別為 q,只有則當 p>=q時,該請求才會被執行。
該規則是 logback 的核心。級別排序為: TRACE < DEBUG < INFO < WARN < ERROR。
logback的使用:
Logback的預設配置
如果配置檔案 logback-test.xml 和 logback.xml 都不存在,那麼 logback 預設地會呼叫BasicConfigurator ,建立一個最小化配置。最小化配置由一個關聯到根 logger 的ConsoleAppender 組成。輸出用模式為%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n 的 PatternLayoutEncoder 進行格式化。root logger 預設級別是 DEBUG。
1、Logback的配置檔案
Logback 配置檔案的語法非常靈活。正因為靈活,所以無法用 DTD 或 XML schema 進行定義。儘管如此,可以這樣描述配置檔案的基本結構:以開頭,後面有零個或多個元素,有零個或多個元素,有最多一個元素。
2、Logback預設配置的步驟
(1). 嘗試在 classpath 下查詢檔案 logback-test.xml;
(2). 如果檔案不存在,則查詢檔案 logback.xml;
(3). 如果兩個檔案都不存在,logback 用 Bas icConfigurator 自動對自己進行配置,這會導致記錄輸出到控制檯。
3、Logback.xml 檔案
在src/main/resources下新增logback.xml目錄如下:
內容如下:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <configuration> 3 4 <!-- 控制檯輸出 --> 5 <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 6 <!-- Log message format --> 7 <encoder> 8 <!-- 格式化輸出:%d表示日期,%thread表示執行緒名,%-5level:級別從左顯示5個字元寬度%msg:日誌訊息,%n是換行符 --> 9 <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> 10 </encoder> 11 </appender> 12 <!-- 按照每天生成日誌檔案 --> 13 <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 14 <file>journal.log</file> 15 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 16 <!-- daily rollover --> 17 <!--日誌檔案輸出的檔名--> 18 <FileNamePattern>journal.%d{yyyy-MM-dd}.log</FileNamePattern> 19 <!-- keep 30 days' worth of history --> 20 <!--日誌檔案保留天數--> 21 <maxHistory>30</maxHistory> 22 </rollingPolicy> 23 <encoder> 24 <!--日誌檔案最大的大小--> 25 <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> 26 <MaxFileSize>10MB</MaxFileSize> 27 </triggeringPolicy> 28 29 <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg %n</Pattern> 30 </encoder> 31 </appender> 32 33 <logger name="org.mybatis" level="INFO"> 34 <appender-ref ref="STDOUT" /> 35 </logger> 36 <!-- logger設定的級別優先順序高,將sql級別設成DEBUG,可以看到DEBUG中顯示的sql語句及Total--> 37 <logger name="java.sql.Statement" level="DEBUG" /> 38 <logger name="java.sql.PreparedStatement" level="DEBUG" /> 39 40 <logger name="org.springframework" level="INFO" /> 41 42 <!-- Setting the root level of logging to INFO --> 43 <!-- 日誌輸出級別 --> 44 <root level="INFO"> 45 <appender-ref ref="STDOUT" /> 46 <appender-ref ref="FILE" /> 47 </root> 48 </configuration>
日誌輸出情況:
日誌輸出級別為INFO,則預設輸出INFO級別以上的日誌即INFO、WARN 、 ERROR。由於SQL輸出級別為直接設定為DEBUG,所以可以看到DEBUG輸出的sql語句。