背景
程序開發調試中,不可缺少的便是日志管理,常用的日志管理框架有如下幾種:
- Log4j:Apache Log4j是一個基于JAVA的日志記錄工具。它是由Ceki Gülcü首創的,現在則是Apache軟件基金會的一個項目。 Log4j是幾種Java日志框架之一。
- Log4j 2: Apache Log4j 2是Apache開發的一款Log4j的升級產品。
- Commons Logging: Apache基金會所屬的項目,是一套Java日志接口,之前叫Jakarta Commons Logging,后更名為Commons Logging。
- Slf4j: 類似于Commons Logging,是一套簡易Java日志門面,本身并無日志的實現。(Simple Logging Facade for Java,縮寫Slf4j)。
- Logback: 一套日志組件的實現(Slf4j陣營)。
- Jul (Java Util Logging),自Java1.4以來的官方日志實現。
因框架眾多,本章重點介紹Log4j使用方法,在文中若有誤解的地方煩請各位讀者提出,在這里小編先感謝百忙之中的您提出寶貴的意見。
Log4j入門介紹
- Log4j是什么?
一個開源的、輕量級的、用于日志管理的框架。
- Log4j用途?
- 日志監控打印,在項目運行期需要記錄用戶所有的操作;
- 程序調試期間,記錄運行的步驟和運行;
- 多個日志的輸出源,比如到數據庫、eclipse控制臺,或者日志文件到linux服務器下等。
- Log4j常用配置文件有以下兩種方式:
- log4j.properties
- log4j.xml
Log4j日志級別
Log4j日志級別有以下幾種:
- OFF 最高等級,用于關閉所有日志記錄;
- FATAL 指出每個嚴重的錯誤事件將會導致應用程序的退出;
- ERROR 指出雖然發生錯誤事件,但仍然不影響系統的繼續運行;
- WARN 表明會出現潛在的錯誤情形;
- INFO 一般和在粗粒度級別上,強調應用程序的運行全程;
- DEBUG 一般用于細粒度級別上,對調試應用程序非常有幫助。
- ALL 最低等級,用于打開所有日志記錄。
常用日志級別:
- 常用日志級別有:ERROR、WARN、INFO、DEBUG;
- 排列順序(從高到低):DEBUG < INFO < WARN < ERROR;
- 日志打印規則: 打印自身往后靠。
獲取方式
private static final Logger logger = Logger.getLogger(ClassName.class);
輸出源Appender、布局LayOut
- 輸出源Appender
輸出源
- 布局LayOut
布局
- Appender、Layout、Logger三者之間的關系:
- 每個appender后面必然需要跟隨layout,指定自己的風格樣式 ;
- 每個Logger都可以指定一個級別,同時引用多個Appender;
- 每個Appender也同時可以被多個Logger引用。
配置文件設置
rootLogger(配置根logger)
rootLogger語法:
log4j.rootLogger = [ level], appenderName1, appenderName2, appenderNameN
說明:
1. level為日志記錄的優先級;
2. appenderName為日志的輸出地方;
例如:
log4j.appender.appenderName1 = org.apache.log4j.ConsoleAppender
appender(配置日志輸出目的地)
appender語法:
# 控制臺
log4j.appender.appenderName = org.apache.log4j.ConsoleAppender
# 文件
log4j.appender.appenderName = org.apache.log4j.FileAppender
# 每天產生一個日志文件
log4j.appender.appenderName = org.apache.log4j.DailyRollingFileAppender
# 文件大小到達指定尺寸的時候產生一個新的文件
log4j.appender.appenderName = org.apache.log4j.RollingFileAppender
# 將日志信息以流格式發送到任意指定的地方
log4j.appender.appenderName = org.apache.log4j.WriterAppender
# 把日志用JDBC記錄到數據庫中
log4j.appender.appenderName = org.apache.log4j.jdbc.JDBCAppender
layout(配置日志信息的格式/布局)
layout語法:
# 以html表格形式布局
log4j.appender.appenderName.layout = org.apache.log4j.HTMLLayout
# 可以靈活的指定布局模式(常用)
log4j.appender.appenderName.layout = org.apache.log4j.PatternLayout
# 包含日志信息的級別和信息字符串
log4j.appender.appenderName.layout = org.apache.log4j.SimpleLayout
# 包含日志產生的時間、線程、類別等等信息
log4j.appender.appenderName.layout = org.apache.log4j.TTCCLayout
說明:
log4j.appender.appenderName.layout = org.apache.log4j.PatternLayout 和
log4j.appender.FileLog.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss,SSS}
都是成對出現的;
配置文件常用選項屬性
- ConsoleAppender選項屬性
Threshold=DEBUG: 指定日志消息的輸出最低層次;
ImmediateFlush=true: 默認值是true,意謂著所有的消息都會被立即輸出;
Target=System.err:默認值System.out,輸出到控制臺(err為紅色,out為黑色)。
- FileAppender選項屬性
Threshold=DEBUF:指定日志消息的輸出最低層次;
ImmediateFlush=true:默認值是true,意謂著所有的消息都會被立即輸出;
File=mylog.txt:指定消息輸出到mylog.txt文件;
Append=false:默認值是true,將消息追加到指定文件中,false指將消息覆蓋指定的文件內容;
Encoding = UTF-8:可以指定文件編碼格式。
- DailyRollingFileAppender選項屬性
Threshold = WARN: 指定日志消息的輸出最低層次;
ImmediateFlush = TRUE: 默認值是true,所有的消息都會被立即輸出;
File = C:log4j.log:指定消息輸出到C:log4j.log文件;
Append = FALSE:默認值true,將消息追加到指定文件中,false指將消息覆蓋指定的文件內容;
Encoding = UTF-8:可以指定文件編碼格式;
DatePattern='.'yyyy-ww:每周滾動一次文件,即每周產生一個新的文件。
其中DatePattern還可以是以下參數文件:
'.'yyyy-MM:每月
'.'yyyy-ww:每周
'.'yyyy-MM-dd:每天
'.'yyyy-MM-dd-a:每天半天
'.'yyyy-MM-dd-HH:每小時
'.'yyyy-MM-dd-HH-mm:每分鐘
- RollingFileAppender選項屬性
Threshold = ERROR:指定日志消息的輸出最低層次;
ImmediateFlush = TRUE:默認值是true,所有的消息都會被立即輸出;
File = C:/log4j.log:指定消息輸出到C:/log4j.log文件;
Append = FALSE:默認值true,將消息追加到指定文件中,false指將消息覆蓋指定的文件內容;
MaxFileSize = 100KB:后綴可以是KB,MB,GB.在日志文件到達該大小時,將會自動滾動;例如:log4j.log.1
MaxBackupIndex = 2:指定可以產生的滾動文件的最大數;
Encoding = UTF-8:可以指定文件編碼格式。
- HTMLLayout選項屬性
LocationInfo = TRUE:默認值false,輸出java文件名稱和行號
Title=Struts Log Message:默認值 Log4J Log Messages
- PatternLayout選項屬性
ConversionPattern = %m%n:格式化指定的消息
- XMLLayout選項屬性
LocationInfo = TRUE:默認值false,輸出java文件名稱和行號
配置文件Log4j.properties和Log4j.xml優先級
- log4j.xml優先于log4j.properties;
- log4j.xml的優勢:
1. filter精確匹配,避免往后靠的大于等于,可以OnlyOne過濾出我需要的;
2. additivity="false"精確匹配,停止傳播。