slf4j + logback 集成

概述

日志在系統(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):slf4jlogback 物臂。

集成

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):

  1. 利用 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

  1. logback.xml 的配置菩帝。

主要是 <appender> 、<logger> 茬腿、<root> 的配置

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末呼奢,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子切平,更是在濱河造成了極大的恐慌握础,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件悴品,死亡現(xiàn)場(chǎng)離奇詭異弓候,居然都是意外死亡郎哭,警方通過(guò)查閱死者的電腦和手機(jī)他匪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)菇存,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人邦蜜,你說(shuō)我怎么就攤上這事依鸥。” “怎么了悼沈?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵贱迟,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我絮供,道長(zhǎng)衣吠,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任壤靶,我火速辦了婚禮缚俏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘贮乳。我一直安慰自己忧换,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布向拆。 她就那樣靜靜地躺著亚茬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪浓恳。 梳的紋絲不亂的頭發(fā)上刹缝,一...
    開(kāi)封第一講書(shū)人閱讀 49,031評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音颈将,去河邊找鬼梢夯。 笑死,一個(gè)胖子當(dāng)著我的面吹牛吆鹤,可吹牛的內(nèi)容都是我干的厨疙。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼疑务,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼沾凄!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起知允,我...
    開(kāi)封第一講書(shū)人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤撒蟀,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后温鸽,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體保屯,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡手负,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了姑尺。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片竟终。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖切蟋,靈堂內(nèi)的尸體忽然破棺而出统捶,到底是詐尸還是另有隱情,我是刑警寧澤柄粹,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布喘鸟,位于F島的核電站,受9級(jí)特大地震影響驻右,放射性物質(zhì)發(fā)生泄漏什黑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一堪夭、第九天 我趴在偏房一處隱蔽的房頂上張望愕把。 院中可真熱鬧,春花似錦茵瘾、人聲如沸礼华。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)圣絮。三九已至,卻和暖如春雕旨,著一層夾襖步出監(jiān)牢的瞬間扮匠,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工凡涩, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留坦弟,地道東北人檐什。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親掩缓。 傳聞我的和親對(duì)象是個(gè)殘疾皇子谆甜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理擦酌,服務(wù)發(fā)現(xiàn)蛇更,斷路器,智...
    卡卡羅2017閱讀 134,599評(píng)論 18 139
  • 在項(xiàng)目開(kāi)發(fā)過(guò)程中筋讨,我們可以通過(guò) debug 查找問(wèn)題埃叭。而在線(xiàn)上環(huán)境我們查找問(wèn)題只能通過(guò)打印日志的方式查找問(wèn)題。因此...
    Java架構(gòu)閱讀 3,459評(píng)論 2 41
  • 一悉罕、logback的介紹Logback是由log4j創(chuàng)始人設(shè)計(jì)的另一個(gè)開(kāi)源日志組件,官方網(wǎng)站: http://lo...
    Running小琦閱讀 768評(píng)論 0 8
  • 8.7 Spring Boot集成日志 SLF4J與Logback簡(jiǎn)介 Java日志框架眾多赤屋,常用的有java.u...
    光劍書(shū)架上的書(shū)閱讀 10,472評(píng)論 3 31
  • 這本書(shū)立镶,我還沒(méi)有來(lái)得及讀完,可是类早,我有太多想要說(shuō)出來(lái)媚媒。 我?guī)缀跻e(cuò)過(guò)這本書(shū),看了關(guān)于這本書(shū)的眾多書(shū)評(píng)莺奔,我以為這又是...
    高中語(yǔ)文筆記幫閱讀 633評(píng)論 4 3