如何配置SLF4J不同的日志實(shí)現(xiàn)

使用slf4j庫(kù)作為你的Java應(yīng)用日志API層有很多好處,這里我會(huì)展示一小部分關(guān)于如何使用和配置它的例子阔籽。

你可以把slf4j想成一個(gè)Java的接口匪补,然后你需要實(shí)現(xiàn)這個(gè)接口,從而在運(yùn)行時(shí)提供實(shí)際的日志記錄染簇,例如把日志寫到控制臺(tái)(STDOUT)或者一個(gè)文件上等等对室。每種實(shí)現(xiàn)(或成為綁定)都顯而易見(jiàn)地有他們自己的方式來(lái)配置日志的輸出模燥,但是你的應(yīng)用對(duì)實(shí)現(xiàn)者并無(wú)感知并且一直使用相同的org.slf4j.Logger API。讓我們看看如何在實(shí)際中使用它掩宜。

使用slf4j做簡(jiǎn)單的日志記錄

創(chuàng)建基于Maven的工程蔫骂,在pom.xml中添加如下內(nèi)容

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-api</artifactId>
  <version>1.7.5</version>
</dependency>

現(xiàn)在你可以在你的Java代碼中這樣使用Logger

package deng;

import org.slf4j.*;

public class Hello {
    static Logger LOGGER = LoggerFactory.getLogger(Hello.class);
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++)
            if (i % 2 == 0)
                LOGGER.info("Hello {}", i);
            else
                LOGGER.debug("I am on index {}", i);
    }
}

以上代碼可以編譯通過(guò),但是當(dāng)你運(yùn)行它時(shí)牺汤,你會(huì)看到這樣的輸出

bash> java deng.Hello
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

上面的意思是辽旋,在運(yùn)行時(shí),你沒(méi)有做日志的實(shí)現(xiàn)(或者說(shuō)日志的綁定)檐迟,所以slf4j簡(jiǎn)簡(jiǎn)單單的使用了一個(gè)什么也不會(huì)做的空實(shí)現(xiàn)补胚。
為了看到正確的輸出,你應(yīng)該嘗試使用一個(gè)簡(jiǎn)單(simple)的實(shí)現(xiàn)追迟,這個(gè)實(shí)現(xiàn)根本不需要任何配置糖儡!只要回到pom.xml然后添加如下配置

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-simple</artifactId>
    <version>1.7.5</version>
</dependency>

現(xiàn)在你可以在控制臺(tái)(STDOUT)看見(jiàn)INFO級(jí)別的日志輸出了。這個(gè)簡(jiǎn)單的logger會(huì)默認(rèn)顯示任何INFO或者更高級(jí)別的信息怔匣。想要看DEBUG級(jí)別的信息,你需要在Java啟動(dòng)時(shí)傳入這個(gè)系統(tǒng)屬性(system property)

-Dorg.slf4j.simpleLogger.defaultLogLevel=DEBUG

使用slf4j與Log4j日志

現(xiàn)在我們可以試驗(yàn)并更換不同的日志實(shí)現(xiàn)桦沉,但你的程序代碼可以保持不變每瞒。
我們要做的是用另一個(gè)流行的日志實(shí)現(xiàn)來(lái)替換掉slf4j-simple,比如Log4j纯露。

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-log4j12</artifactId>
  <version>1.7.5</version>
</dependency>

又一次剿骨,我們必須對(duì)我們選的每一個(gè)日志實(shí)現(xiàn)做配置。在這個(gè)例子中埠褪,我們需要一個(gè)文件src/main/resources/log4j.properties浓利。

log4j.rootLogger=DEBUG, STDOUT
log4j.logger.deng=INFO
log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout
log4j.appender.STDOUT.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

重運(yùn)行你的程序挤庇,你會(huì)看到同樣的輸出結(jié)果。

使用slf4j和JDK日志

JDK實(shí)際上帶有一個(gè)日志包贷掖,你可以在pom.xml中替換為另一個(gè)日志實(shí)現(xiàn)嫡秕。

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-jdk14</artifactId>
    <version>1.7.5</version>
</dependency>

現(xiàn)在JDK日志的配置起來(lái)有一點(diǎn)困難。這里不僅需要一個(gè)配置文件src/main/resources/logging.properties苹威,你還需要添加一個(gè)系統(tǒng)屬性

-Djava.util.logging.config.file=logging.properties

這是一個(gè)logging.properties的示例

level=INFO
handlers=java.util.logging.ConsoleHandler
java.util.logging.ConsoleHandler.level=FINEST
deng.level=FINEST

使用slf4j和Logback日志

Logback日志實(shí)現(xiàn)是一個(gè)高質(zhì)量的實(shí)現(xiàn)昆咽。如果你想在項(xiàng)目中寫認(rèn)真的代碼,你會(huì)想要考慮這中方式牙甫。還是修改你的pom.xml文件掷酗,替換成這樣

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.0.13</version>
</dependency>

這是一個(gè)簡(jiǎn)單的配置src/main/resources/logback.xml

<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <logger name="deng" level="DEBUG"/>

    <root level="INFO">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

用slf4j寫你自己的日志庫(kù)

如果你正在很多終端用戶(END USER)提供Java庫(kù),那么讓你的項(xiàng)目?jī)H依賴slf4j-api絕對(duì)是個(gè)好想法窟哺,然后讓你的用戶在他們開(kāi)發(fā)和運(yùn)營(yíng)環(huán)境中選擇任意的日志實(shí)現(xiàn)泻轰。作為終端用戶,他們可以快速地從上面提到的日志庫(kù)中選擇一個(gè)且轨,并且從他們自己喜歡的日志實(shí)現(xiàn)的特性中受益浮声。


翻譯自: How to Configure SLF4J with Different Logger Implementations

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市殖告,隨后出現(xiàn)的幾起案子阿蝶,更是在濱河造成了極大的恐慌,老刑警劉巖黄绩,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件羡洁,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡爽丹,警方通過(guò)查閱死者的電腦和手機(jī)筑煮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)粤蝎,“玉大人真仲,你說(shuō)我怎么就攤上這事〕跖欤” “怎么了秸应?”我有些...
    開(kāi)封第一講書人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)碑宴。 經(jīng)常有香客問(wèn)我软啼,道長(zhǎng),這世上最難降的妖魔是什么延柠? 我笑而不...
    開(kāi)封第一講書人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任祸挪,我火速辦了婚禮,結(jié)果婚禮上贞间,老公的妹妹穿的比我還像新娘贿条。我一直安慰自己雹仿,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布整以。 她就那樣靜靜地躺著胧辽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪悄蕾。 梳的紋絲不亂的頭發(fā)上票顾,一...
    開(kāi)封第一講書人閱讀 51,541評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音帆调,去河邊找鬼奠骄。 笑死,一個(gè)胖子當(dāng)著我的面吹牛番刊,可吹牛的內(nèi)容都是我干的含鳞。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼芹务,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蝉绷!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起枣抱,我...
    開(kāi)封第一講書人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤熔吗,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后佳晶,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體桅狠,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年轿秧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了中跌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡菇篡,死狀恐怖漩符,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情驱还,我是刑警寧澤嗜暴,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站议蟆,受9級(jí)特大地震影響闷沥,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜咪鲜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望撞鹉。 院中可真熱鬧疟丙,春花似錦颖侄、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至炊琉,卻和暖如春展蒂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背苔咪。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工锰悼, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人团赏。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓箕般,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親舔清。 傳聞我的和親對(duì)象是個(gè)殘疾皇子丝里,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

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