探路 Logback 日志文件
1.Logback?強(qiáng)在哪
1)非常自然的實(shí)現(xiàn)了SLF4J,不需要像Log4j和JUL那樣加一個(gè)適配層。

????? ?2)Spring Boot的默認(rèn)日志框架使用的是Logback。一旦某款工具庫(kù)成為了默認(rèn)選項(xiàng),那就說(shuō)明這款工具已經(jīng)超過(guò)了其他競(jìng)品。
2.怎么使用Logback?
第一步,在pom.xml文件中添加Logback 的依賴(lài):
ch.qos.logback
logback-classic
1.2.3
maven會(huì)自動(dòng)導(dǎo)入另外兩個(gè)依賴(lài);

logback-core 是Logback 的核心,logback-classic 是SLF4J的實(shí)現(xiàn)。
第二步:簡(jiǎn)單的示例

import?org.slf4j.Logger;
import?org.slf4j.LoggerFactory;
Logger?和LoggerFactory?都來(lái)自SLF4J,所以如果項(xiàng)目是從 Log4j + SLF4J 切換到 Logback 的話,此時(shí)的代碼是零改動(dòng)的。
運(yùn)行 Test 類(lèi),可以在控制臺(tái)看到以下信息:
12:04:20.149?[main]?DEBUG?com.itwanger.Test?-?logback
在沒(méi)有配置文件的情況下,一切都是默認(rèn)的,Logback 的日志信息會(huì)輸出到控制臺(tái)。可以通過(guò) StatusPrinter 來(lái)打印 Logback 的內(nèi)部信息:
LoggerContext?lc?=?(LoggerContext)LoggerFactory.getILoggerFactory();
StatusPrinter.print(lc);
在 main 方法中添加以上代碼后,再次運(yùn)行 Test 類(lèi),可以在控制臺(tái)看到以下信息:

也就是說(shuō),Logback 會(huì)在 classpath 路徑下先尋找 logback-test.xml 文件,沒(méi)有找到的話,尋找 logback.groovy 文件,還沒(méi)有的話,尋找 logback.xml 文件,都找不到的話,就輸出到控制臺(tái)。
一般來(lái)說(shuō),我們會(huì)在本地環(huán)境中配置 logback-test.xml,在生產(chǎn)環(huán)境下配置 logback.xml。
第三步,在 resource 目錄下增加 logback-test.xml 文件,內(nèi)容如下:
1)配置 appender
appender?可以配置多個(gè)類(lèi),這里列出三個(gè)類(lèi)

截取的部分Logback配置,其他日志級(jí)別的配置基本上與此類(lèi)似,可自行調(diào)整。

Logback 的配置文件非常靈活,最基本的結(jié)構(gòu)為??元素,包含 0 或多個(gè)??元素,其后跟 0 或多個(gè)??元素,其后再跟最多只能存在一個(gè)的??元素。
encoder 負(fù)責(zé)把日志信息轉(zhuǎn)換成字節(jié)數(shù)組,并且把字節(jié)數(shù)組寫(xiě)到輸出流
2)配置 root,它只支持一個(gè)屬性——level,值可以為:TRACE、DEBUG、INFO、WARN、ERROR、ALL、OFF。
appender-ref 用來(lái)指定具體的 appender。
3)查看內(nèi)部狀態(tài)信息。
可以在代碼中通過(guò) StatusPrinter 來(lái)打印 Logback 內(nèi)部狀態(tài)信息,也可以通過(guò)在 configuration 上開(kāi)啟 debug 來(lái)打印內(nèi)部狀態(tài)信息。
4)自動(dòng)重載配置。
之前提到 Logback 很強(qiáng)的一個(gè)功能就是支持自動(dòng)重載配置,那想要啟用這個(gè)功能也非常簡(jiǎn)單,只需要在 configuration 元素上添加?scan=true?即可。
<configuration?scan="true">
????...
configuration>
默認(rèn)情況下,掃描的時(shí)間間隔是一分鐘一次。如果想要調(diào)整時(shí)間間隔,可以通過(guò) scanPeriod 屬性進(jìn)行調(diào)整,單位可以是毫秒(milliseconds)、秒(seconds)、分鐘(minutes)或者小時(shí)(hours)。
下面這個(gè)示例指定的時(shí)間間隔是 30 秒:
"true"?scanPeriod="30?seconds"
???...
注意:如果指定了時(shí)間間隔,沒(méi)有指定時(shí)間單位,默認(rèn)的時(shí)間單位為毫秒。
當(dāng)設(shè)置?scan=true?后,Logback 會(huì)起一個(gè) ReconfigureOnChangeTask 的任務(wù)來(lái)監(jiān)視配置文件的變化。
配置完成之后把logback.xml文件放在資源文件目錄下,啟動(dòng)項(xiàng)目即可。logback會(huì)根據(jù)logback這個(gè)名稱(chēng)自己去匹配加載。
%d{HH:mm:ss.SSS} %relative [%thread] %-5level %logger{36} - %msg%n
運(yùn)行后,可以在 配置的目錄下看到兩個(gè)文件:debug.log 和 errror.log。
