柚子快報激活碼778899分享:Log4j日志配置詳解
柚子快報激活碼778899分享:Log4j日志配置詳解
一、Log4j簡介
Log4j有三個主要的組件:
Loggers(寫出器):日志寫出器 ,供程序員輸出日志信息。簡單理解:配置日志寫出的Level 和 AppendersAppenders (輸出源):日志目的地 ,把格式化好的日志信息輸出到指定的地方去Layouts(布局):日志格式化器 ,用來把程序員的 logging request 格式化成字符串
綜合使用這三個組件能輕松地記錄信息的類型和級別,并可以在運行時控制日志輸出的樣式和位置。
1、Loggers
說明:
Loggers組件在此系統(tǒng)中被分為五個級別:DEBUG、INFO、WARN、ERROR和FATAL這五個級別是有順序的,DEBUG < INFO < WARN < ERROR < FATAL,分別用來指定這條日志信息的重要程度,明白這一點很重要Log4j有一個規(guī)則:只輸出級別不低于設(shè)定級別的日志信息
假設(shè)Loggers級別設(shè)定為INFO則INFO、WARN、ERROR和FATAL級別的日志信息都會輸出而級別比INFO低的DEBUG則不會輸出。 常用配置方法如下
配置根 Logger
語法為: log4j.rootLogger = [ level ] , appenderName, …rootLogger:根Logger (日志寫出器),可以理解為默認日志寫出器[level]:根Logger的寫出日志的級別appenderName:Appenders組件名 配置包 Logger
語法:log4j.logger.packageName= [ level ] , appenderName, …logger.packageName:包下所有類都采用當(dāng)前Logger(日志寫出器)進行寫出 配置類 Logger
語法:log4j.logger.全限定類名= [ level ] , appenderName, …logger.全限定類名:指定類所使用的Logger
2、Appenders
把日志輸出到不同的地方,如控制臺(Console)、文件(Files)等,可以根據(jù)天數(shù)或者文件大小產(chǎn)生新的文件,可以以流的形式發(fā)送到其它地方等等。 常使用的類如下:
org.apache.log4j.ConsoleAppender // 控制臺
org.apache.log4j.FileAppender // 文件
org.apache.log4j.DailyRollingFileAppender // 每天產(chǎn)生一個日志文件
org.apache.log4j.RollingFileAppender // 文件大小到達指定尺寸的時候產(chǎn)生一個新的文件
org.apache.log4j.WriterAppender // 將日志信息以流格式發(fā)送到任意指定的地方
配置模式:
log4j.appender.appenderName = className
log4j.appender.appenderName.Option1 = value1
…
log4j.appender.appenderName.OptionN = valueN
3、Layouts
有時用戶希望根據(jù)自己的喜好格式化自己的日志輸出,Log4j可以在Appenders的后面附加Layouts來完成這個功能。Layouts提供四種日志輸出樣式,如根據(jù)HTML樣式、自由指定樣式、包含日志級別與信息的樣式和包含日志時間、線程、類別等信息的樣式。 常使用的類如下
org.apache.log4j.HTMLLayout // 以HTML表格形式布局
org.apache.log4j.PatternLayout // 靈活地指定布局模式
org.apache.log4j.SimpleLayout // 包含日志信息的級別和信息字符串
org.apache.log4j.TTCCLayout // 包含日志產(chǎn)生的時間、線程、類別等信息
配置模式:
log4j.appender.appenderName.layout =className
log4j.appender.appenderName.layout.Option1 = value1
…
log4j.appender.appenderName.layout.OptionN = valueN
二、配置詳解
1、配置Logger(日志寫出器)
常見配置參數(shù):
level :設(shè)定日志記錄的最低級別,可設(shè)的值有OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定義的級別,Log4j建議只使用中間四個級別。通過在這里設(shè)定級別,您可以控制應(yīng)用程序中相應(yīng)級別的日志信息的開關(guān),比如在這里設(shè)定了INFO級別,則應(yīng)用程序中所有DEBUG級別的日志信息將不會被打印出來。appenderName:指定日志信息要輸出到哪里??梢酝瑫r指定多個輸出目的地,用逗號隔開logger.xx.xx:指定哪個包/類設(shè)定Logger 配置根Logger
// 理解為:默認的Logger
log4j.rootLogger = [level] , appenderName1, appenderName2, …
// 表示Logger不會在父Logger的appender里輸出,默認為true
log4j.additivity.org.apache=false
配置包Logger
// 指定 com.gk.test.controller包下所有類使用的Logger
log4j.logger.com.gk.test.controller= [ level ] , appenderName
配置指定類Logger
// 指定UserController類所使用的Logger
log4j.logger.com.gk.test.controller.UserController= [ level ] , appenderName
2、配置Appender(日志信息輸出目的地)
配置格式:log4j.appender.appenderName = className
appenderName:被Logger器使用的自定義標識符(,如:A1、bb、C123都可以)
一般定義時都比較有意義,如:console(控制臺)、rollFile(滾動文件) className 可設(shè)值項:
org.apache.log4j.ConsoleAppender :控制臺org.apache.log4j.FileAppender:文件org.apache.log4j.DailyRollingFileAppender:每天產(chǎn)生一個日志文件org.apache.log4j.RollingFileAppender:文件大小到達指定尺寸的時候產(chǎn)生一個新的文件org.apache.log4j.WriterAppender:將日志信息以流格式發(fā)送到任意指定的地方
ConsoleAppender選項
Threshold=WARN # 指定日志信息的最低輸出級別,默認為DEBUGImmediateFlush=true # 表示所有消息都會被立即輸出,設(shè)為false則不輸出,默認值是trueTarget=System.err # 默認值是System.out
FileAppender選項
Threshold=WARN # 指定日志信息的最低輸出級別,默認為DEBUG。ImmediateFlush=true # 表示所有消息都會被立即輸出,設(shè)為false則不輸出,默認值是trueAppend=false # true表示消息增加到指定文件中,false則將消息覆蓋指定的文件內(nèi)容,默認值是trueFile=logs/system.log # 指定消息輸出到system.log文件中
DailyRollingFileAppender選項
Threshold=WARN # 指定日志信息的最低輸出級別,默認為DEBUG。ImmediateFlush=true # 表示所有消息都會被立即輸出,設(shè)為false則不輸出,默認值是trueAppend=false # true表示消息增加到指定文件中,false則將消息覆蓋指定的文件內(nèi)容,默認值是true。File=logs/system.log # 指定當(dāng)前消息輸出到logging.log4j文件中。DatePattern='.'yyyy-MM #每月滾動一次日志文件,即每月產(chǎn)生一個新的日志文件,當(dāng)前日志文件名為system.log,前一個月的日志文件名為system.log.yyyy-MM
另外:也可以指定按周、天、時、分等來滾動日志文件,對應(yīng)的格式如下:
'.'yyyy-MM:每月'.'yyyy-ww:每周'.'yyyy-MM-dd:每天'.'yyyy-MM-dd-a:每天兩次'.'yyyy-MM-dd-HH:每小時'.'yyyy-MM-dd-HH-mm:每分鐘
RollingFileAppender選項
Threshold=WARN # 指定日志信息的最低輸出級別,默認為DEBUGImmediateFlush=true # 表示所有消息都會被立即輸出,設(shè)為false則不輸出,默認值是trueAppend=false # true表示消息增加到指定文件中,false則將消息覆蓋指定的文件內(nèi)容,默認值是trueFile=logs/system.log # 指定消息輸出到logging.log4j文件中MaxFileSize=100KB # 在日志文件到達該大小時,將會自動滾動,即將原來的內(nèi)容移到system.log.1文件中,后綴可以是KB, MB 或者GBMaxBackupIndex=2 # 指定可以產(chǎn)生的滾動文件的最大數(shù)。設(shè)置為2,則會產(chǎn)生一個sytem.log的當(dāng)前文件 和 sytem.log.1、sytem.log.2兩個滾動文件
3、配置Layout(日志輸出格式)
配置格式:log4j.appender.appenderName.layout=className
className可設(shè)置項
org.apache.log4j.HTMLLayout:以HTML表格形式布局org.apache.log4j.PatternLayout:可以靈活地指定布局模式org.apache.log4j.SimpleLayout:包含日志信息的級別和信息字符串org.apache.log4j.TTCCLayout:包含日志產(chǎn)生的時間、線程、類別等等信息
HTMLLayout選項
LocationInfo=true # 輸出java文件名稱和行號,默認值是false。Title=My Logging # 默認值是Log4J Log Messages。
PatternLayout選項
ConversionPattern=%m%n # 設(shè)定以怎樣的格式顯示消息,%m%n:是2個格式化符號
格式化符號 說明:
%p:輸出日志信息的優(yōu)先級,即DEBUG,INFO,WARN,ERROR,F(xiàn)ATAL%d:輸出日志時間點的日期或時間,默認格式為ISO8601,也可以在其后指定格式,如:%d{yyyy/MM/dd HH:mm:ss,SSS}%r:輸出自應(yīng)用程序啟動到輸出該log信息耗費的毫秒數(shù)%t:輸出產(chǎn)生該日志事件的線程名%l:輸出日志事件的發(fā)生位置,相當(dāng)于%c.%M(%F:%L)的組合,包括類全名、方法、文件名以及在代碼中的行數(shù)。如:test.TestLog4j.main(TestLog4j.java:10)%c:輸出日志信息所屬的類目,通常就是所在類的全名%M:輸出產(chǎn)生日志信息的方法名%F:輸出日志消息產(chǎn)生時所在的文件名稱%L::輸出代碼中的行號%m::輸出代碼中指定的具體日志信息%n:輸出一個回車換行符,Windows平臺為"rn",Unix平臺為"n"%x:輸出和當(dāng)前線程相關(guān)聯(lián)的NDC(嵌套診斷環(huán)境),尤其用到像java servlets這樣的多客戶多線程的應(yīng)用中%%:輸出一個"%"字符
通過在%與格式字符之間加上修飾符來控制日志長度、文本對齊方式
例1:%-20c
[-]:表示左對齊,如果沒有寫 [-] 表示使用默認右對齊[20]:最小長度為20個字符,最大長度使用 [.20] 表示[c]:上面說的格式化符號%c(輸出日志信息所屬的類目,通常就是所在類的全名)
例2:%.30l
[.30]:最大的長度是30,如果長度大于30的話,就會將左邊多出的字符截掉。但小于30不會補空[l]:上面說的格式化符號%l注意:這個例子中沒有使用 [-] ,故:默認右對齊
三、案例
# Log4j配置文件實現(xiàn)了輸出到控制臺、文件、回滾文件、發(fā)送日志郵件、輸出到數(shù)據(jù)庫日志表、自定義標簽等全套功能。
log4j.rootLogger=DEBUG,console,logFile,dailyFile,im
log4j.additivity.org.apache=true
# 控制臺(console)
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Threshold=DEBUG
log4j.appender.console.ImmediateFlush=true
log4j.appender.console.Target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n
# 日志文件(logFile)
log4j.appender.logFile=org.apache.log4j.FileAppender
log4j.appender.logFile.Threshold=DEBUG
log4j.appender.logFile.ImmediateFlush=true
log4j.appender.logFile.Append=true
log4j.appender.logFile.File=logs/logfile.log
log4j.appender.logFile.layout=org.apache.log4j.PatternLayout
log4j.appender.logFile.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n
# 回滾文件(rollingFile)
log4j.appender.rollingFile=org.apache.log4j.RollingFileAppender
log4j.appender.rollingFile.Threshold=DEBUG
log4j.appender.rollingFile.ImmediateFlush=true
log4j.appender.rollingFile.Append=true
log4j.appender.rollingFile.File=logs/rollingfile.log
log4j.appender.rollingFile.MaxFileSize=200KB
log4j.appender.rollingFile.MaxBackupIndex=50
log4j.appender.rollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.rollingFile.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n
# 定期回滾日志文件(dailyFile)
log4j.appender.dailyFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.dailyFile.Threshold=DEBUG
log4j.appender.dailyFile.ImmediateFlush=true
log4j.appender.dailyFile.Append=true
log4j.appender.dailyFile.File=logs/dailyfile.log
log4j.appender.dailyFile.DatePattern='.'yyyy-MM-dd
log4j.appender.dailyFile.layout=org.apache.log4j.PatternLayout
log4j.appender.dailyFile.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n
# 應(yīng)用于socket
log4j.appender.socket=org.apache.log4j.RollingFileAppender
log4j.appender.socket.RemoteHost=localhost
log4j.appender.socket.Port=5001
log4j.appender.socket.LocationInfo=true
# Set up for Log Factor 5
log4j.appender.socket.layout=org.apache.log4j.PatternLayout
log4j.appender.socket.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n
# Log Factor 5 Appender
log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender
log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000
# 發(fā)送日志到指定郵件
log4j.appender.mail=org.apache.log4j.net.SMTPAppender
log4j.appender.mail.Threshold=FATAL
log4j.appender.mail.BufferSize=10
log4j.appender.mail.From = xxx@mail.com
log4j.appender.mail.SMTPHost=mail.com
log4j.appender.mail.Subject=Log4J Message
log4j.appender.mail.To= xxx@mail.com
log4j.appender.mail.layout=org.apache.log4j.PatternLayout
log4j.appender.mail.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n
# 應(yīng)用于數(shù)據(jù)庫
log4j.appender.database=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.database.URL=jdbc:mysql://localhost:3306/test
log4j.appender.database.driver=com.mysql.jdbc.Driver
log4j.appender.database.user=root
log4j.appender.database.password=
log4j.appender.database.sql=INSERT INTO LOG4J (Message) VALUES('=[%-5p] %d(%r) --> [%t] %l: %m %x %n')
log4j.appender.database.layout=org.apache.log4j.PatternLayout
log4j.appender.database.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n
# 自定義Appender
log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender
log4j.appender.im.host = mail.cybercorlin.net
log4j.appender.im.username = username
log4j.appender.im.password = password
log4j.appender.im.recipient = corlin@cybercorlin.net
log4j.appender.im.layout=org.apache.log4j.PatternLayout
log4j.appender.im.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n
轉(zhuǎn)
Log4j日志配置詳解log4j配置詳解(非常詳細)org.apache.log4j.Logger詳解
柚子快報激活碼778899分享:Log4j日志配置詳解
好文鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。