什麼是 Logback.xml 日誌框架? ConsoleAppender、FileAppender 和 RollingFileAppender 示例
已發表: 2019-02-13
你知道Logback Logging Framework
嗎? 好吧,大多數人主要在他們的項目中使用log4j and slf4j
。 自從過去 6 個月以來,我一直在使用Logback.xml
日誌框架,我想說我在生產應用程序中看到了很多性能改進。
在本教程中,我們將介紹 Logback 日誌框架的實際示例。
什麼是 logback.qos.ch?
Logback 是 Log4j 的一種新版本。 它是從 log4j 開發停止的地方開發的。

在 Crunchify 上,如果您有興趣,我們已經發布了多個關於 Log4j 的教程:
- 如何設置自己的 log4j 日誌記錄級別?
- 如何配置 log4j.properties?
在這裡,我們將詳細介紹如何為您的企業 Java 項目設置 Logback 日誌框架。 我們將在下面創建新文件。
- 資源文件夾下
logback.xml
文件 - Java 類
CrunchifyLogbackLogging.java
讓我們開始吧
Step-1 創建 logback.xml 文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
<? xml version = "1.0" encoding = "UTF-8" ?> < configuration > < appender name = "CRUNCHIFYOUT" class = "ch.qos.logback.core.ConsoleAppender" > < layout class = "ch.qos.logback.classic.PatternLayout" > < Pattern > % d { HH : mm : ss . SSS } [ % thread ] % - 5level % logger { 36 } % X { sourceThread } - % msg % n < / Pattern > < / layout > < / appender > < appender name = "CRUNCHIFYFILE" class = "ch.qos.logback.core.FileAppender" > < file > / Users / ashah / Documents / crunchify . log < / file > < encoder > < pattern > % date % level [ % thread ] % logger { 10 } [ % file : % line ] % msg % n < / pattern > < / encoder > < / appender > < appender name = "CRUNCHIFYROLLING" class = "ch.qos.logback.core.rolling.RollingFileAppender" > < file > / Users / ashah / Documents / crunchify - rolling . log < / file > < encoder class = "ch.qos.logback.classic.encoder.PatternLayoutEncoder" > < Pattern > % d { yyyy - MM - dd HH : mm : ss } [ % thread ] % level % logger { 35 } - % msg % n < / Pattern > < / encoder > < rollingPolicy class = "ch.qos.logback.core.rolling.TimeBasedRollingPolicy" > < ! -- We are rolling over daily -- > < fileNamePattern > crunchify . log . timeroll . % d { yyyy - MM - dd } . log < / fileNamePattern > < ! -- keep 10 days ' worth of history capped at 1GB total size -- > < maxHistory > 10 < / maxHistory > < totalSizeCap > 1GB < / totalSizeCap > < / rollingPolicy > < / appender > < ! -- default is DEBUG -- > < root level = "DEBUG" > < appender - ref ref = "CRUNCHIFYOUT" / > < appender - ref ref = "CRUNCHIFYFILE" / > < appender - ref ref = "CRUNCHIFYROLLING" / > < / root > < / configuration > |
我們先了解一下 logback.xml 文件。
- 在文件的底部,您會看到我們在
root
元素下有 3 個附加程序引用appender-ref
。 - 我們使用日誌級別作為
DEBUG
。 這意味著使用 DEBUG 及以上級別打印所有內容。
CRUNCHIFYOUT
appender 屬於 ch.qos.logback.core 類。 ConsoleAppender
。 這意味著,所有日誌記錄數據都將打印到 Eclipse 控制台。
CRUNCHIFYFILE
是 ch.qos.logback.core 類型。 FileAppender
。 這意味著,所有日誌記錄數據也將打印到本地文件。 在我們的例子中,它是 /Users/ ashah /Documents/ crunchify.log
。
CRUNCHIFYROLLING
屬於 ch.qos.logback.core.rolling 類型。 RollingFileAppender
。 正如您在 rollingPolicy 中看到的,我們每天都在滾動文件並最多保留 10 個文件。 此外,在我們的示例中,總文件大小容量限制為1 GB
。 新文件將在/Users/ ashah /Documents/ crunchify -rolling.log
位置創建。
步驟 2 編寫 Java 程序進行測試。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
package crunchify . com . tutorial ; import org . slf4j . Logger ; import org . slf4j . LoggerFactory ; /** * @author Crunchify.com * Program: Very simple Logback.xml test class with ConsoleAppender, FileAppender and RollingFileAppender * Version: 1.0.0 * */ public class CrunchifyLogbackLogging { private final Logger crunchifyLogging = LoggerFactory . getLogger ( CrunchifyLogbackLogging . class ) ; public static void main ( String [ ] args ) { CrunchifyLogbackLogging crunchifyLogger = new CrunchifyLogbackLogging ( ) ; crunchifyLogger . getStartedwithLogBackTesting ( ) ; } private void getStartedwithLogBackTesting ( ) { for ( int i = 1 ; i < = 10 ; i ++ ) { crunchifyLogging . debug ( "......This is test by Crunchify on Logback DEBUG...... " ) ; crunchifyLogging . info ( "......This is test by Crunchify on Logback INFO......" ) ; crunchifyLogging . error ( "......This is test by Crunchify on Logback ERROR......" ) ; crunchifyLogging . warn ( "......This is test by Crunchify on Logback WARN......" ) ; } } } |
這是一個非常簡單的 Java 測試類,我們在其中使用了錯誤、信息、調試和警告所有 4 個日誌級別。 我們循環了 10 次。
第三步
運行上述程序後,logback 框架將創建兩個新文件,如上所述。

檢查您的 Eclipse 控制台。 您將看到以下日誌:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
15 : 36 : 12 , 978 | - INFO in ch . qos . logback . classic . LoggerContext [ default ] - Could NOT find resource [ logback - test . xml ] 15 : 36 : 12 , 978 | - INFO in ch . qos . logback . classic . LoggerContext [ default ] - Could NOT find resource [ logback . groovy ] 15 : 36 : 12 , 978 | - INFO in ch . qos . logback . classic . LoggerContext [ default ] - Found resource [ logback . xml ] at [ file : / Users / ashah / Documents / site / Bitbucket / crunchifytutorials / target / classes / logback . xml ] 15 : 36 : 13 , 077 | - INFO in ch . qos . logback . classic . joran . action . ConfigurationAction - debug attribute not set 15 : 36 : 13 , 077 | - INFO in ch . qos . logback . core . joran . action . AppenderAction - About to instantiate appender of type [ ch . qos . logback . core . ConsoleAppender ] 15 : 36 : 13 , 087 | - INFO in ch . qos . logback . core . joran . action . AppenderAction - Naming appender as [ CRUNCHIFYOUT ] 15 : 36 : 13 , 143 | - WARN in ch . qos . logback . core . ConsoleAppender [ CRUNCHIFYOUT ] - This appender no longer admits a layout as a sub - component , set an encoder instead . 15 : 36 : 13 , 143 | - WARN in ch . qos . logback . core . ConsoleAppender [ CRUNCHIFYOUT ] - To ensure compatibility , wrapping your layout in LayoutWrappingEncoder . 15 : 36 : 13 , 143 | - WARN in ch . qos . logback . core . ConsoleAppender [ CRUNCHIFYOUT ] - See also http : //logback.qos.ch/codes.html#layoutInsteadOfEncoder for details 15 : 36 : 13 , 144 | - INFO in ch . qos . logback . core . joran . action . AppenderAction - About to instantiate appender of type [ ch . qos . logback . core . FileAppender ] 15 : 36 : 13 , 147 | - INFO in ch . qos . logback . core . joran . action . AppenderAction - Naming appender as [ CRUNCHIFYFILE ] 15 : 36 : 13 , 147 | - INFO in ch . qos . logback . core . joran . action . NestedComplexPropertyIA - Assuming default type [ ch . qos . logback . classic . encoder . PatternLayoutEncoder ] for [ encoder ] property 15 : 36 : 13 , 148 | - INFO in ch . qos . logback . core . FileAppender [ CRUNCHIFYFILE ] - File property is set to [ / Users / ashah / Documents / crunchify . log ] 15 : 36 : 13 , 151 | - INFO in ch . qos . logback . core . joran . action . AppenderAction - About to instantiate appender of type [ ch . qos . logback . core . rolling . RollingFileAppender ] 15 : 36 : 13 , 152 | - INFO in ch . qos . logback . core . joran . action . AppenderAction - Naming appender as [ CRUNCHIFYROLLING ] 15 : 36 : 13 , 159 | - INFO in c . q . l . core . rolling . TimeBasedRollingPolicy @ 2096171631 - setting totalSizeCap to 1 GB 15 : 36 : 13 , 161 | - INFO in c . q . l . core . rolling . TimeBasedRollingPolicy @ 2096171631 - No compression will be used 15 : 36 : 13 , 163 | - INFO in c . q . l . core . rolling . TimeBasedRollingPolicy @ 2096171631 - Will use the pattern crunchify . log . timeroll . % d { yyyy - MM - dd } . log for the active file 15 : 36 : 13 , 166 | - INFO in c . q . l . core . rolling . DefaultTimeBasedFileNamingAndTriggeringPolicy - The date pattern is 'yyyy-MM-dd' from file name pattern 'crunchify.log.timeroll.%d{yyyy-MM-dd}.log' . 15 : 36 : 13 , 166 | - INFO in c . q . l . core . rolling . DefaultTimeBasedFileNamingAndTriggeringPolicy - Roll - over at midnight . 15 : 36 : 13 , 171 | - INFO in c . q . l . core . rolling . DefaultTimeBasedFileNamingAndTriggeringPolicy - Setting initial period to Thu Sep 07 11 : 42 : 27 CDT 2017 15 : 36 : 13 , 173 | - INFO in ch . qos . logback . core . rolling . RollingFileAppender [ CRUNCHIFYROLLING ] - Active log file name : / Users / ashah / Documents / crunchify - rolling . log 15 : 36 : 13 , 173 | - INFO in ch . qos . logback . core . rolling . RollingFileAppender [ CRUNCHIFYROLLING ] - File property is set to [ / Users / ashah / Documents / crunchify - rolling . log ] 15 : 36 : 13 , 173 | - INFO in ch . qos . logback . classic . joran . action . RootLoggerAction - Setting level of ROOT logger to DEBUG 15 : 36 : 13 , 174 | - INFO in ch . qos . logback . core . joran . action . AppenderRefAction - Attaching appender named [ CRUNCHIFYOUT ] to Logger [ ROOT ] 15 : 36 : 13 , 174 | - INFO in ch . qos . logback . core . joran . action . AppenderRefAction - Attaching appender named [ CRUNCHIFYFILE ] to Logger [ ROOT ] 15 : 36 : 13 , 174 | - INFO in ch . qos . logback . core . joran . action . AppenderRefAction - Attaching appender named [ CRUNCHIFYROLLING ] to Logger [ ROOT ] 15 : 36 : 13 , 174 | - INFO in ch . qos . logback . classic . joran . action . ConfigurationAction - End of configuration . 15 : 36 : 13 , 175 | - INFO in ch . qos . logback . classic . joran . JoranConfigurator @ 7e0babb1 - Registering current configuration as safe fallback point 15 : 36 : 13.181 [ main ] DEBUG c . c . tutorial . CrunchifyLogbackLogging - . . . . . . This is test by Crunchify on Logback DEBUG . . . . . . 15 : 36 : 13.186 [ main ] INFO c . c . tutorial . CrunchifyLogbackLogging - . . . . . . This is test by Crunchify on Logback INFO . . . . . . 15 : 36 : 13.187 [ main ] ERROR c . c . tutorial . CrunchifyLogbackLogging - . . . . . . This is test by Crunchify on Logback ERROR . . . . . . 15 : 36 : 13.187 [ main ] WARN c . c . tutorial . CrunchifyLogbackLogging - . . . . . . This is test by Crunchify on Logback WARN . . . . . . 15 : 36 : 13.188 [ main ] DEBUG c . c . tutorial . CrunchifyLogbackLogging - . . . . . . This is test by Crunchify on Logback DEBUG . . . . . . 15 : 36 : 13.188 [ main ] INFO c . c . tutorial . CrunchifyLogbackLogging - . . . . . . This is test by Crunchify on Logback INFO . . . . . . 15 : 36 : 13.188 [ main ] ERROR c . c . tutorial . CrunchifyLogbackLogging - . . . . . . This is test by Crunchify on Logback ERROR . . . . . . 15 : 36 : 13.188 [ main ] WARN c . c . tutorial . CrunchifyLogbackLogging - . . . . . . This is test by Crunchify on Logback WARN . . . . . . |
除此之外,您還可以檢查本地文件日誌,如您所見, logback.xml
文件已創建所有新文件並開始在其中打印日誌。


享受吧,您已經正確設置了 logback.xml 和所有 3 個附加程序:ConsoleAppender、FileAppender、RollingFileAppender。
獎勵點:
你想用FixedWindowRollingPolicy
設置RollingFileAppender
嗎? 使用下面的 appender 並將其放入 logback.xml 文件中,你應該一切都好
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
< appender name = "CRUNCHIFYROLLINGFIXEDWINDOW" class = "ch.qos.logback.core.rolling.RollingFileAppender" > < file > / Users / ashah / Documents / crunchify - rolling - fixwindows . log < / file > < encoder class = "ch.qos.logback.classic.encoder.PatternLayoutEncoder" > < pattern > % date % level [ % thread ] % logger { 10 } [ % file : % line ] % msg % n < / pattern > < / encoder > < rollingPolicy class = "ch.qos.logback.core.rolling.FixedWindowRollingPolicy" > < FileNamePattern > crunchify . log . fixedsize . { yyyy - MM - dd } % i . log < / FileNamePattern > < MinIndex > 1 < / MinIndex > < MaxIndex > 15 < / MaxIndex > < / rollingPolicy > < triggeringPolicy class = "ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy" > < MaxFileSize > 20MB < / MaxFileSize > < / triggeringPolicy > < / appender > |
此外,只需在根元素下添加 appender-ref。
1 |
< appender - ref ref = "CRUNCHIFYROLLINGFIXEDWINDOW" / > |