第一章 Logback 介紹

什么是logback?

Logback 是流行的 log4j 項(xiàng)目的繼承者污淋。它是由 log4j 的創(chuàng)始人 Ceki Gülcü 設(shè)計(jì)的贝搁。logback 比所有現(xiàn)有的日志記錄系統(tǒng)更快颅悉,占用空間更小箕宙。同樣重要的是,logback 提供了其他日志系統(tǒng)所缺少的獨(dú)特而有用的特性羽峰。

第一步

Logback classic 模塊需要slf4j-api.jar文件和logback-core.jar 除了logback-classic.jar在類路徑上恃慧。

logback-.jar 文件是 logback 發(fā)行版的一部分园蝠,而slf4j-api-2.0.0-alpha1.jar*隨 SLF4J 一起提供,這是一個(gè)單獨(dú)的項(xiàng)目痢士。

現(xiàn)在讓我們開始試驗(yàn)logback彪薛。

在開始之前,請確保已經(jīng)使用自己的IDE創(chuàng)建了一個(gè)Maven的工程。具體如何創(chuàng)建Maven工程不在本篇的范圍內(nèi)善延。

在pom.xml文件中引入:

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

Maven會(huì)幫助我們自動(dòng)下載logback需要的jar包的训唱。

示例1.1:日志記錄的基本模板(logback-examples/src/main/java/chapters/introduction/HelloWorld1.java

創(chuàng)建如下的類:

package chapters.introduction;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class HelloWorld1 {

  public static void main(String[] args) {

    Logger logger = LoggerFactory.getLogger("chapters.introduction.HelloWorld1");
    logger.debug("Hello world.");

  }
}

HelloWorld1 類定義在 chapters.introduction 包中。它首先導(dǎo)入 SLF4J API 中定義的LoggerLoggerFactory類挚冤,他們都在org.slf4j 包中况增。

在 main 方法中,定義了一個(gè)名為 logger 的變量训挡,通過調(diào)用 LoggerFactory 類中的靜態(tài)方法 getLogger 來創(chuàng)建一個(gè) Logger 對象澳骤。

這個(gè) logger 的名字是 “chapters.introduction.HelloWorld1"。也就是靜態(tài)方法getLogger 中傳入的內(nèi)容澜薄。

main 方法繼續(xù)執(zhí)行程序为肮,運(yùn)行 logger.debug("Hello world.") 這句代碼。這里將 “helloworld” 作為參數(shù)傳遞到debug方法中肤京。debug 代表了該條消息的級別颊艳,其中的內(nèi)容就是 Hello world.

注意,上面的示例沒有引用任何logback類忘分。在大多數(shù)情況下棋枕,就日志記錄而言,您的類只需要導(dǎo)入SLF4J類妒峦。因此重斑,絕大多數(shù)情況是使用slf4j api 就可以了,我們感覺不到 logback 的存在肯骇。

您可以啟動(dòng)上面的示例應(yīng)用程序chapters.introduction.HelloWorld1 窥浪,使用如下命令:

java chapters.introduction.HelloWorld1

但是我還是建議直接用IDE,不管是IDEA還是Eclipse笛丙,來運(yùn)行程序比較簡單漾脂。

啟動(dòng) HelloWorld1 應(yīng)用程序?qū)⒃诳刂婆_(tái)上輸出一行。根據(jù) logback 的默認(rèn)配置策略胚鸯,當(dāng)找不到默認(rèn)配置文件時(shí)骨稿,logback 將向根記錄器添加一個(gè) ConsoleAppender。

輸出內(nèi)容如下:

17:23:25.151 [main] DEBUG chapters.introduction.HelloWorld1-Hello world.

Logback 可以使用內(nèi)置的狀態(tài)系統(tǒng)報(bào)告有關(guān)其內(nèi)部狀態(tài)的信息蠢琳。在 logback 的生存期內(nèi)發(fā)生的重要事件可以通過一個(gè)名為 StatusManager 的組件進(jìn)行訪問啊终。目前镜豹,讓我們通過調(diào)用 StatusPrinter 類的靜態(tài)方法print() 來打印出 logback 的內(nèi)部狀態(tài)傲须。

示例:打印 Logger 狀態(tài)(logback-examples/src/main/java/chapters/introduction/HelloWorld2.java)

package chapters.introduction;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.core.util.StatusPrinter;

public class HelloWorld2 {

  public static void main(String[] args) {
    Logger logger = LoggerFactory.getLogger("chapters.introduction.HelloWorld2");
    logger.debug("Hello world.");

    // 打印內(nèi)部狀態(tài)
    LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
    StatusPrinter.print(lc);
  }
}

運(yùn)行 HelloWorld2 程序?qū)a(chǎn)生以下輸出:

18:05:25.743 [main] DEBUG chapters.introduction.HelloWorld2 - Hello world.
18:05:25,598 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
18:05:25,602 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
18:05:25,603 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.xml]
18:05:25,621 |-INFO in ch.qos.logback.classic.BasicConfigurator@6fdb1f78 - Setting up default configuration.

先讀一下 Logback 的輸出日志不難明白,它想告訴我們:

1. 無法找到 logback-test.xml(稍后討論)

2. 無法找到logback.groovy

3. 無法找到logback.xml(稍后討論)

Logback 使用默認(rèn)的策略進(jìn)行配置趟脂,基于 ConsoleAppender 進(jìn)行配置泰讽。一個(gè) Appender 是一個(gè)類。這個(gè)類可以看做輸出目標(biāo)。Appender 存在許多不同的目標(biāo)已卸,比如控制臺(tái)佛玄、文件、Syslog累澡、TCP 套接字梦抢、JMS 等。用戶可以根據(jù)情況很方便的創(chuàng)建自己的 Appender 愧哟。

請注意奥吩,如果出現(xiàn)錯(cuò)誤,logback 將在控制臺(tái)上自動(dòng)打印其內(nèi)部狀態(tài)蕊梧。

前面的例子相當(dāng)簡單霞赫。在更大的應(yīng)用程序中的實(shí)際日志記錄不會(huì)有那么大的差別。記錄語句的一般模式不會(huì)改變肥矢。只有配置過程會(huì)有所不同端衰。但是,您可能需要根據(jù)需要自定義或配置logback甘改。Logback配置將在后面的章節(jié)中介紹旅东。

注意,在上面的示例中十艾,我們已經(jīng)指示 logback 通過調(diào)用 StatusPrinter.print() 方法來打印它的內(nèi)部狀態(tài)玉锌。Logback 的內(nèi)部狀態(tài)信息在診斷 Logback 相關(guān)問題時(shí)非常有用。

下面列出了啟用應(yīng)用程序登錄所需的三個(gè)步驟疟羹。

配置 logback 環(huán)境主守。你可以用幾種復(fù)雜的方法來實(shí)現(xiàn)。稍后再談榄融。

在希望執(zhí)行日志記錄的每個(gè)類中参淫,通過調(diào)用org.slf4j.LoggerFactory類的getLogger()方法,將當(dāng)前類名或類本身作為參數(shù)傳遞愧杯。

通過調(diào)用其打印方法(即debug()涎才、info()、warn() 和 error()方法)來使用此 logger 實(shí)例力九。這將在配置的附加器上生成日志輸出耍铜。

構(gòu)建 logback

這部分可以跳過,并不是重點(diǎn)內(nèi)容跌前,我們?nèi)绻麤]有其他需要棕兼,只是開發(fā)中使用的話,這部分直接跳過就可以了抵乓。

作為它的構(gòu)建工具伴挚,logback依賴于Maven靶衍,一個(gè)廣泛使用的開源構(gòu)建工具。

安裝Maven之后茎芋,構(gòu)建logback項(xiàng)目颅眶,包括它的所有模塊,應(yīng)該很容易田弥,就像在未歸檔logback發(fā)行版的目錄中發(fā)出mvn install命令一樣涛酗。Maven將自動(dòng)下載所需的外部庫。

Logback發(fā)行版包含完整的源代碼偷厦,您可以修改Logback庫的部分內(nèi)容并構(gòu)建自己的版本煤杀。您甚至可以重新發(fā)布修改后的版本,只要您遵守LGPL許可證或EPL許可證的條件沪哺。

要在IDE下構(gòu)建logback沈自,請參閱類路徑設(shè)置頁上的相關(guān)部分。

后記

本篇文章是基于官網(wǎng)翻譯辜妓,但是又經(jīng)過了我的精心處理枯途,更適合我們閱讀,更符合我們普通的人員練習(xí)的思路籍滴,其中將兩章的內(nèi)容進(jìn)行了整合酪夷。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市孽惰,隨后出現(xiàn)的幾起案子晚岭,更是在濱河造成了極大的恐慌,老刑警劉巖勋功,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坦报,死亡現(xiàn)場離奇詭異,居然都是意外死亡狂鞋,警方通過查閱死者的電腦和手機(jī)片择,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來骚揍,“玉大人字管,你說我怎么就攤上這事⌒挪唬” “怎么了嘲叔?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長抽活。 經(jīng)常有香客問我硫戈,道長,這世上最難降的妖魔是什么酌壕? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任掏愁,我火速辦了婚禮,結(jié)果婚禮上卵牍,老公的妹妹穿的比我還像新娘果港。我一直安慰自己,他們只是感情好糊昙,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布辛掠。 她就那樣靜靜地躺著,像睡著了一般释牺。 火紅的嫁衣襯著肌膚如雪萝衩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天没咙,我揣著相機(jī)與錄音猩谊,去河邊找鬼。 笑死祭刚,一個(gè)胖子當(dāng)著我的面吹牛牌捷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播涡驮,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼暗甥,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了捉捅?” 一聲冷哼從身側(cè)響起撤防,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎棒口,沒想到半個(gè)月后寄月,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡无牵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年剥懒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片合敦。...
    茶點(diǎn)故事閱讀 40,133評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡初橘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出充岛,到底是詐尸還是另有隱情保檐,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布崔梗,位于F島的核電站夜只,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蒜魄。R本人自食惡果不足惜扔亥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一场躯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧旅挤,春花似錦踢关、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至柒瓣,卻和暖如春儒搭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背芙贫。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工搂鲫, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人磺平。 一個(gè)月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓默穴,卻偏偏與公主長得像,于是被迫代替她去往敵國和親褪秀。 傳聞我的和親對象是個(gè)殘疾皇子蓄诽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評論 2 355

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