概述
日志在系統(tǒng)中的重要作用是毋庸置疑的妒峦,而 slf4j 和 logback 都是屬于 QOS.ch 的非常優(yōu)秀的日志系統(tǒng)杏节,需要了解和學(xué)習(xí)的可以訪(fǎng)問(wèn): slf4j官網(wǎng) ,logback官網(wǎng) 乐导;源代碼也放在Github上苦丁,需要的可以跳轉(zhuǎn):slf4j , logback 物臂。
集成
pom.xml
在 pom.xml 中添加:
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
會(huì)有三個(gè) jar 包旺拉,分別是 logback-classic-1.2.3.jar ,logback-core-1.2.3.jar ,和 slf4j-api-1.7.25.jar 产上,官方的說(shuō)明是:
Note that in addition to logback-classic.jar, the above declaration will automatically pull-in slf4j-api.jar and logback-core.jar into your project by virtue of Maven's transitivity rules.
這個(gè)時(shí)候已經(jīng)可以使用 slf4j 的日志功能了,再對(duì) logback 相關(guān)的進(jìn)行配置蛾狗。
配置
關(guān)于配置的問(wèn)題晋涣,還是需要去看官網(wǎng)看,15個(gè)章節(jié)(目錄在右側(cè)):Introduction 沉桌。
初始化過(guò)程
在第三章節(jié)中谢鹊,有關(guān)于 logback 的初始化過(guò)程的表述:
Let us begin by discussing the initialization steps that logback follows to try to configure itself:
1.Logback tries to find a file called logback-test.xml in the classpath.
2.If no such file is found, logback tries to find a file called logback.groovy in the classpath.
3.If no such file is found, it checks for the file logback.xml in the classpath..
4.If no such file is found, service-provider loading facility (introduced in JDK 1.6) is used to resolve the implementation of com.qos.logback.classic.spi.Configurator interface by looking up the file META-INF\services\ch.qos.logback.classic.spi.Configurator in the class path. Its contents should specify the fully qualified class name of the desired Configurator implementation.
5.If none of the above succeeds, logback configures itself automatically using the BasicConfigurator which will cause logging output to be directed to the console.
The last step is meant as last-ditch effort to provide a default (but very basic) logging functionality in the absence of a configuration file.
先查找配置文件,依次查找 logback-test.xml 留凭、logback.groovy 和 logback.xml佃扼;如果都沒(méi)有,則查找是否有實(shí)現(xiàn)特定配置接口的類(lèi)蔼夜;還沒(méi)有兼耀,則使用默認(rèn)的日志功能。
基本配置
在 src\main\resources 目錄下添加文件logback.xml :
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- ch.qos.logback.core.ConsoleAppender 控制臺(tái)輸出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
</Pattern>
</encoder>
</appender>
<!-- ch.qos.logback.core.ConsoleAppender 控制臺(tái)輸出 -->
<appender name="test1" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
</Pattern>
</encoder>
</appender>
<!-- 日志級(jí)別 -->
<root level="INFO">
<appender-ref ref="console" />
</root>
<logger name="web.com.base" level="INFO" appender-ref="test1"/>
</configuration>
<p><configuration> 可以有 <appender> 求冷、<logger> 瘤运、<root> 三個(gè)元素,其中 <root> 是必須要有至少一個(gè)匠题,而另外兩個(gè)可以沒(méi)有拯坟,也可以多個(gè)。
<p><appender> 要有 name 和 class 兩個(gè)屬性梧躺,可以有 <layout> 似谁、 <encoder> 和 <filter> 三個(gè)元素。class 屬性可以用來(lái)定義控制臺(tái)打印或者文件輸出掠哥。
<p><logger> 可以對(duì)某個(gè)包進(jìn)行特定的日志記錄巩踏,可以控制級(jí)別的 level 和關(guān)聯(lián)的 appender-ref 。
<p><root> 是必須要有的配置续搀,控制日志級(jí)別塞琼,關(guān)聯(lián) <appender> 控制日志輸出。
更詳細(xì)的內(nèi)容請(qǐng)參考官網(wǎng)或源代碼禁舷。
其中彪杉,<level> 標(biāo)簽中定義日志的級(jí)別,可以是 ALL/TRACE/DEBUG/INFO/WARN/ERROR/OFF 牵咙,級(jí)別高于標(biāo)簽內(nèi)限定級(jí)別的日志都會(huì)打印派近,OFF > ERROR > WARN > INFO > DEBUG > TRACE > ALL。
logback 中對(duì)級(jí)別的定義和 slf4j 有不同之處洁桌,slf4j 沒(méi)有 OFF 和 ALL 兩個(gè)渴丸,OFF 表示所有日志都不記錄,而 ALL 表示全部日志都記錄∑坠欤可以查看源代碼中關(guān)于這方面的詳細(xì)情況戒幔,貼出幾段代碼:
public static final int OFF_INT = Integer.MAX_VALUE;
public static final int ERROR_INT = 40000;
public static final int WARN_INT = 30000;
public static final int INFO_INT = 20000;
public static final int DEBUG_INT = 10000;
public static final int TRACE_INT = 5000;
public static final int ALL_INT = Integer.MIN_VALUE;
public static final Integer OFF_INTEGER = OFF_INT;
public static final Integer ERROR_INTEGER = ERROR_INT;
public static final Integer WARN_INTEGER = WARN_INT;
public static final Integer INFO_INTEGER = INFO_INT;
public static final Integer DEBUG_INTEGER = DEBUG_INT;
public static final Integer TRACE_INTEGER = TRACE_INT;
public static final Integer ALL_INTEGER = ALL_INT;
測(cè)試
日志記錄
為方便測(cè)試,添加了測(cè)試的配置 src/test/resources/logback-test.xml 土童,詳細(xì)如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- ch.qos.logback.core.ConsoleAppender 控制臺(tái)輸出 -->
<appender name="test" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
</Pattern>
</encoder>
</appender>
<!-- 日志級(jí)別 -->
<root>
<level value="TRACE" />
<appender-ref ref="test" />
</root>
</configuration>
其中日志級(jí)別是 TRACE 诗茎。
測(cè)試代碼:
public class LogTest {
protected Logger logger = LoggerFactory.getLogger(this.getClass());
@Test
public void logTest(){
logger.trace("-----trace-----");
logger.debug("-----debug-----");
logger.info("-----info-----");
logger.warn("-----warn-----");
logger.error("-----error-----");
}
}
運(yùn)行結(jié)果:
14:40:19.069 [main] TRACE web.com.test.LogTest - -----trace-----
14:40:19.073 [main] DEBUG web.com.test.LogTest - -----debug-----
14:40:19.073 [main] INFO web.com.test.LogTest - -----info-----
14:40:19.074 [main] WARN web.com.test.LogTest - -----warn-----
14:40:19.074 [main] ERROR web.com.test.LogTest - -----error-----
日志級(jí)別
將 TRACE 級(jí)別改成 INFO ,測(cè)試結(jié)果:
14:40:36.416 [main] INFO web.com.test.LogTest - -----info-----
14:40:36.421 [main] WARN web.com.test.LogTest - -----warn-----
14:40:36.421 [main] ERROR web.com.test.LogTest - -----error-----
再將 INFO 改成 ERROR 献汗,測(cè)試結(jié)果:
14:41:32.404 [main] ERROR web.com.test.LogTest - -----error-----
從測(cè)試結(jié)果看敢订,<level> 標(biāo)簽中的級(jí)別是最低記錄級(jí)別,凡是高于或等于這個(gè)級(jí)別的日志雀瓢,都會(huì)被記錄下來(lái)枢析。同樣的,可以測(cè)試 ALL 和 OFF 兩個(gè)級(jí)別時(shí)的結(jié)果刃麸。
可以利用 <logger> 來(lái)針對(duì)某些包做特定的控制醒叁。
文件記錄
將日志記錄在文件中,也方便做日志保存泊业。配置如下:
<!-- ch.qos.logback.core.FileAppender 文件輸出 -->
<appender name="test1" class="ch.qos.logback.core.FileAppender">
<file>debug.log</file>
<encoder>
<Pattern>%d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n
</Pattern>
</encoder>
</appender>
<!-- 日志級(jí)別 -->
<root level="DEBUG">
<appender-ref ref="test1" />
</root>
在項(xiàng)目根目錄下會(huì)有 debug.log 文件把沼,日志會(huì)在該文件中保存。
總結(jié)
利用 logback 可以對(duì)日志做更多的控制吁伺,包括日志級(jí)別饮睬、格式等等,甚至是具體到包的日志控制篮奄,對(duì)系統(tǒng)日常的活動(dòng)有很大的幫助捆愁。logback 還有很多作用,通過(guò)官網(wǎng)和源代碼繼續(xù)學(xué)習(xí)窟却。
關(guān)鍵點(diǎn):
- 利用 maven 集成昼丑,pom.xml內(nèi)容添加;
三個(gè) jar 包夸赫,分別是 logback-classic-1.2.3.jar ,logback-core-1.2.3.jar ,和 slf4j-api-1.7.25.jar
- logback.xml 的配置菩帝。
主要是 <appender> 、<logger> 茬腿、<root> 的配置