Log4j日誌配置與詳細解析(log4j.properties)

Log4j日誌配置詳解

1.log4j日誌級別

  • DEBUG:輸出調試信息;指出細粒度信息事件對調試應用程序是非常有幫助的。 
  • INFO: 輸出提示信息;消息在粗粒度級別上突出強調應用程序的運行過程。 
  • WARN: 輸出警告信息;表明會出現潛在錯誤的情形。 
  • ERROR:輸出錯誤信息;指出雖然發生錯誤事件,但仍然不影響系統的繼續運行。 
  • FATAL: 輸出致命錯誤;指出每個嚴重的錯誤事件將會導致應用程序的退出。 
  • ALL level:打開所有日誌記錄開關;是最低等級的,用於打開所有日誌記錄。 
  • OFF level:關閉所有日誌記錄開關;是最高等級的,用於關閉所有日誌記錄。

按照範圍從小到大排序:OFF level > FATAL > ERROR > WARN > INFO > DEBUG > ALL level;範圍大的會包含範圍小的,例如日誌設置爲INFO級別的話則FATAL、ERROR、WARN、INFO的日誌開關都是打開的,而DEBUG的日誌開關將是關閉的。

Log4j建議只使用四個級別,優先級從高到低分別是 ERROR、WARN、INFO、DEBUG

Log4j規則:只輸出級別不低於設定級別的日誌信息,假如Loggers級別設定爲INFO,則INFO、WARN、ERROR和FATAL級別的日誌信息都會輸出,而級別比INFO低的DEBUG則不會輸出。

2.Log4j組件

  • Loggers(記錄器)
  • Appenders(輸出源)
  • Layouts(佈局)

2.1.配置根Logger

格式:

log4j.rootLogger = [LEVEL], appenderName1, appenderName2,...
log3j.additivity.org.apache=false #表示Logger不會在父Logger的appender裏輸出,默認爲true

說明:
- LEVEL: 設定日誌記錄的最低級別,可設的值有OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定義組別,Log4j建議只使用中間四個級別。
- appenderName:指定日誌信息要輸出到哪裏,可以同時指定多個輸出目的地,用逗號隔開;

例如:log4j.rootLogger=INFO,stdout, info, warn, error

2.2Appenders(輸出源)


禁用和使用日誌請求是Log4j的基本功能,Log4j日誌系統提供許多強大的功能,比如允許把日誌輸出到不同的地方,如控制檯(Console)、文件(Files)等,可以根據天數或者文件大小產生新的文件,可以以流的形式發送到其它地方等。

常用的類如下:
- org.apache.log4j.ConsoleAppender #控制檯
- org.apache.log4j.FileAppender #日誌文件
- org.apache.log4j.DailyRollingFileAppender #每天產生一個日誌文件
- org.apache.log4j.RollingFileAppender #文件大小到達指定尺寸的時候產生一個新的文件
- org.apache.log4j.WriterAppender #將日誌信息以流格式發送到任意指定的地方
- org.apache.log4j.jdbc.JDBCAppender #數據庫
- org.apache.log4j.net.JMSAppender #
- org.apache.log4j.net.SocketAppender #Socket
- org.apache.log4j.net.SMTPAppender #郵件

2.3Layouts(佈局)


有時,用戶希望根據自己的喜好格式化自己的日誌輸出,Log4j可以在Appenders的後面附加Layouts來完成這個功能。Layouts提供四種日誌輸出格式,如根據HTML樣式、自由指定樣式、包含日誌級別與信息的樣式、包含日誌時間、線程、類別等信息的樣式。

常用類如下:
- org.apache.log4j.HTMLLayout #以HTML表格表式佈局
- org.apache.log4j.PatternLayout #可以靈活批定佈局模式
- org.apache.log4j.SimpleLayout #包含日誌信息的級別和信息字符串
- org.apache.log4j.TTCCLayout #包含日誌產生的時間、線程、類別等信息

3.1爲不同的Appender設置輸出級別

在配置文件中修改Appender的Threshold來實現,例如:

##########Set Log Levels###############
log4j.rootLogger = INFO, console, info, error

######### 輸出到控制檯 ####################
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern = %d{ABSOLUTE}%5p%c{ 1 :%L-%m%n
######### 輸出到文件 ####################
log4j.appender.info = org.apache.log4j.DailyRollingFileAppender
log4j.appender.info.File = ./logs/info.log
log4j.appender.info.Append = true
log4j.appender.info.Threshold = INFO ##輸出INFO級別以上的日誌
log4j.appender.info.layout = org.apache.log4j.PatternLayout
log4j.appender.info.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%t:%r]-[%p] %m%n
######### 保存異常信息到單獨文件 ####################
log4j.appender.error = org.apache.log4j.DailyRollingFileAppender
log4j.appender.error.File = ./logs/error.log
log4j.appender.error.Append = true
log4j.appender.error.Threshold = ERROR ##只輸出ERROR級別及以上的日誌
log4j.appender.error.layout = org.apache.log4j.PatternLayout
log4j.appender.error.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%t:%r]-[%p] %m%n

3.2配置日誌信息輸出目的地(appender)


語法 log4j.appender.[appenderName] = [className]

- appenderName:自定義的appenderName,在log4j.rootLogger中設置;
- className: 可設置如下值:
- org.apache.log4j.ConsoleAppender #控制檯
- org.apache.log4j.FileAppender #日誌文件
- org.apache.log4j.DailyRollingFileAppender #每天產生一個日誌文件
- org.apache.log4j.RollingFileAppender #文件大小到達指定尺寸的時候產生一個新的文件
- org.apache.log4j.WriterAppender #將日誌信息以流格式發送到任意指定的地方
- org.apache.log4j.jdbc.JDBCAppender #數據庫
- org.apache.log4j.net.JMSAppender #
- org.apache.log4j.net.SocketAppender #Socket
- org.apache.log4j.net.SMTPAppender #郵件

ConsoleAppender選項
- Threshold = [DEBUG|INFO|WARN|ERROR|FATAL]: 指定日誌信息的最低輸出級別,默認爲DEBUG;
- ImmediateFlush = [true|false]: 表示所有消息都會被立即輸出,設爲false則不輸出,默認爲true;
- Target = [System.out|System.err]: 默認爲System.out;

FileAppender選項:
- Threshold = [DEBUG|INFO|WARN|ERROR|FATAL]: 指定日誌信息的最低輸出級別,默認爲DEBUG;
- ImmediateFlush = [true|false]: 表示所有消息都會被立即輸出,設爲false則不輸出,默認爲true;
- Append = [true|false]: true表示消息增加到指定文件中,false則將消息覆蓋指定文件內容,默認值爲true;
- File = [path/file]:指定消息輸出到目錄path文件file中;

DailyRollingFileAppender選項:
- Threshold = [DEBUG|INFO|WARN|ERROR|FATAL]: 指定日誌信息的最低輸出級別,默認爲DEBUG;
- ImmediateFlush = [true|false]: 表示所有消息都會被立即輸出,設爲false則不輸出,默認爲true;
- Append = [true|false]: true表示消息增加到指定文件中,false則將消息覆蓋指定文件內容,默認值爲true;
- File = [path/file]:指定消息輸出到目錄path文件file中;
- DataPattern =’.’yyyy-MM:每月滾動一次日誌文件,即每月產生一個新的日誌文件。當前月的日誌文件名爲file,前一個月的日誌文件名爲file.yyyy-MM,另外,可以指定按周、天、時、分等來滾動日誌文件,對應的格式如下:
- ‘.’yyyy-MM: 每月
- ‘.’yyyy-ww: 每週
- ‘.’yyyy-MM-dd:每天
- ‘.’yyyy-MM-dd-a: 每天兩次
- ‘.’yyyy-MM-dd-HH: 每小時
- ‘.’yyyy-MM-dd-HH-mm:每分鐘

RollingFileAppender選項:
- Threshold = [DEBUG|INFO|WARN|ERROR|FATAL]: 指定日誌信息的最低輸出級別,默認爲DEBUG;
- ImmediateFlush = [true|false]: 表示所有消息都會被立即輸出,設爲false則不輸出,默認爲true;
- Append = [true|false]: true表示消息增加到指定文件中,false則將消息覆蓋指定文件內容,默認值爲true;
- File = [path/file]:指定消息輸出到目錄path文件file中;
- MaxFileSize = [num][KB|MB|GB]:在日誌文件達到該大小時,將會自動滾動,即將原來的內容移到file.1文件中。
- MaxBackupIndex = [num]: 指定可以產生的滾動文件的最大數,例如,設爲2時則可以產生file.1, file.2兩個滾動文件和一個file文件;

3.3配置日誌信息的輸出格式(Layout)


語法:log4j.appender.[appenderName].layout = [className]

說明:
- className可設置如下:
- org.apache.log4j.HTMLLayout #以HTML表格表式佈局
- org.apache.log4j.PatternLayout #可以靈活批定佈局模式
- org.apache.log4j.SimpleLayout #包含日誌信息的級別和信息字符串
- org.apache.log4j.TTCCLayout #包含日誌產生的時間、線程、類別等信息

HTMLLayout選項:
- LocationInfo = [true|false]: 輸出java文件名稱和行號,默認值爲false;
- Title = My Logging: 默認值爲Log4j Log Messages

PatternLayout選項:
- ConversionPattern = [%m%n]: 設定以怎樣的格式顯示消息;其中的格式化符號有以下說明:

參數 說明 例子
%c 列出logger名字空間的全稱,如果加上{<層數>}表示列出從最內層算起的指定層數的名字空間 log4j配置文件參數舉例 輸出顯示媒介
假設當前logger名字空間是"a.b.c"
%c a.b.c
%c{2} b.c
%20c (若名字空間長度小於20,則左邊用空格填充)
%-20c (若名字空間長度小於20,則右邊用空格填充)
%.30c (若名字空間長度超過30,截去多餘字符)
%20.30c (若名字空間長度小於20,則左邊用空格填充;若名字空間長度超過30,截去多餘字符)
%-20.30c (若名字空間長度小於20,則右邊用空格填充;若名字空間長度超過30,截去多餘字符)
%C 列出調用logger的類的全名(包含包路徑) 假設當前類是"org.apache.xyz.SomeClass"
%C org.apache.xyz.SomeClass
%C{1} SomeClass
%d 顯示日誌記錄時間,{<日期格式>}使用ISO8601定義的日期格式 %d{yyyy/MM/dd HH:mm:ss,SSS} 2005/10/12 22:23:30,117
%d{ABSOLUTE} 22:23:30,117
%d{DATE} 12 Oct 2005 22:23:30,117
%d{ISO8601} 2005-10-12 22:23:30,117
%F 顯示調用logger的源文件名 %F MyClass.java
%l 輸出日誌事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數 %l MyClass.main(MyClass.java:129)
%L 顯示調用logger的代碼行 %L 129
%m 顯示輸出消息 %m This is a message for debug.
%M 顯示調用logger的方法名 %M main
%n 當前平臺下的換行符 %n Windows平臺下表示rn
UNIX平臺下表示n
%p 顯示該條日誌的優先級 %p INFO
%r 顯示從程序啓動時到記錄該條日誌時已經經過的毫秒數 %r 1215
%t 輸出產生該日誌事件的線程名 %t MyClass
%x 按NDC(Nested Diagnostic Context,線程堆棧)順序輸出日誌 假設某程序調用順序是MyApp調用com.foo.Bar
%c %x - %m%n MyApp - Call com.foo.Bar.
com.foo.Bar - Log in Bar
MyApp - Return to MyApp.
%X 按MDC(Mapped Diagnostic Context,線程映射表)輸出日誌。通常用於多個客戶端連接同一臺服務器,方便服務器區分是那個客戶端訪問留下來的日誌。 %X{5} (記錄代號爲5的客戶端的日誌)
%% 顯示一個百分號 %% %

4.經典Log4j配置大全

log4j.rootLogger=INFO,stdout, info, warn, error,jdbc
####################控制檯Console打印日誌##########################
log4j.logger.stdout=stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Threshold=TRACE
log4j.appender.stdout.Encoding=UTF-8
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.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 = ./log/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 = ./log/rollfile.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###############
#info信息
log4j.logger.info=info
log4j.appender.info=org.apache.log4j.DailyRollingFileAppender
log4j.appender.info.Threshold=INFO
log4j.appender.info.ImmediateFlush=true
log4j.appender.info.Append=true
log4j.appender.info.File=log/info.log
log4j.appender.info.DatePattern='.'yyyy-MM-dd
log4j.appender.info.layout=org.apache.log4j.PatternLayout
log4j.appender.info.layout.ConversionPattern=%d-[HL] %p %l- %m%n
#錯誤信息
log4j.logger.error=warn
log4j.appender.error=org.apache.log4j.DailyRollingFileAppender
log4j.appender.error.Threshold=ERROR
log4j.appender.error.ImmediateFlush=true
log4j.appender.error.Append=true
log4j.appender.error.File=log/error.log
log4j.appender.error.DatePattern='.'yyyy-MM-dd
log4j.appender.error.layout=org.apache.log4j.PatternLayout
log4j.appender.error.layout.ConversionPattern=%d-[HL] %p %l %m%n
#警告信息
log4j.logger.warn=warn
log4j.appender.warn=org.apache.log4j.DailyRollingFileAppender
log4j.appender.warn.Threshold=WARN
log4j.appender.warn.ImmediateFlush=true
log4j.appender.warn.Append=true
log4j.appender.warn.File=log/warn.log
log4j.appender.warn.DatePattern='.'yyyy-MM-dd
log4j.appender.warn.layout=org.apache.log4j.PatternLayout
log4j.appender.warn.layout.ConversionPattern=%d-[HL] %p %l- %m%n

###########################JDBC將日誌輸入到數據庫############################
log4j.appender.jdbc = org.apache.log4j.jdbc.JDBCAppender
log4j.appender.jdbc.URL = jdbc:mysql://localhost:3306/logdb
log4j.appender.jdbc.driver = com.mysql.jdbc.Driver
log4j.appender.jdbc.user = root
log4j.appender.jdbc.password = root
log4j.appender.jdbc.sql = INSERT INTO log4j(Message) VALUES ('[%-5p] %d(%r) -->[%t] %l: %m %x %n')
log4j.appender.jdbc.layout = org.apache.log4j.PatternLayout
log4j.appender.jdbc.layout.ConversionPattern = [%-5p] %d(%r) -->[%t] %l: %m %x %n

######################應用於Socket######################
#client
log4j.appender.socket = org.apache.log4j.net.SocketAppender
log4j.appender.socket.RemoteHost = localhost
log4j.appender.socket.Port = 5001
log4j.appender.socket.LocationInfo = true
log4j.appender.socket.ReconnectionDelay = 10000

#server
log4j.rootLogger = DEBUG, socketFile
log4j.appender.socketFile = org.apache.log4j.RollingFileAppender
log4j.appender.socketFile.File = ./log/servercollected.log
log4j.appender.socketFile.MaxFileSize = 200KB
log4j.appender.socketFile.MaxBackupIndex = 50
log4j.appender.socketFile.layout = org.apache.log4j.PatternLayout
log4j.appender.socketFile.layout.ConversionPattern = [%-5p] %d(%r) -->[%t] %l: %m %x %n

#########################mail##########################
log4j.appender.mail = org.apache.log4j.net.SMTPAppender
log4j.appender.mail.Threshold = FATAL
log4j.appender.mail.BufferSize = 10
log4j.appender.mail.From = [email protected]
log4j.appender.mail.SMTPHost = mail.com
log4j.appender.mail.Subject = Log4j Message
log4j.appender.mail.To = [email protected]
log4j.appender.mail.layout = org.apache.log4j.PatternLayout
log4j.appender.mail.layout.ConversionPattern = [%-5p] %d(%r) -->[%t] %l: %m %x %n


#######################自定義Appender###############
log4j.appender.im = com.dvtn.www.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 = [email protected]
log4j.appender.im.layout=org.apache.log4j.PatternLayout
log4j.appender.im.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章