什么是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 中定義的Logger和LoggerFactory類挚冤,他們都在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)行了整合酪夷。