背景
程序開發(fā)調(diào)試中,不可缺少的便是日志管理,常用的日志管理框架有如下幾種:
- Log4j:Apache Log4j是一個(gè)基于JAVA的日志記錄工具。它是由Ceki Gülcü首創(chuàng)的,現(xiàn)在則是Apache軟件基金會(huì)的一個(gè)項(xiàng)目。 Log4j是幾種Java日志框架之一。
- Log4j 2: Apache Log4j 2是Apache開發(fā)的一款Log4j的升級(jí)產(chǎn)品。
- Commons Logging: Apache基金會(huì)所屬的項(xiàng)目,是一套Java日志接口,之前叫Jakarta Commons Logging,后更名為Commons Logging。
- Slf4j: 類似于Commons Logging,是一套簡(jiǎn)易Java日志門面,本身并無日志的實(shí)現(xiàn)。(Simple Logging Facade for Java,縮寫Slf4j)。
- Logback: 一套日志組件的實(shí)現(xiàn)(Slf4j陣營(yíng))。
- Jul (Java Util Logging),自Java1.4以來的官方日志實(shí)現(xiàn)。
因框架眾多,本章重點(diǎn)介紹Log4j使用方法,在文中若有誤解的地方煩請(qǐng)各位讀者提出,在這里小編先感謝百忙之中的您提出寶貴的意見。
Log4j入門介紹

- Log4j是什么?
一個(gè)開源的、輕量級(jí)的、用于日志管理的框架。
- Log4j用途?
- 日志監(jiān)控打印,在項(xiàng)目運(yùn)行期需要記錄用戶所有的操作;
- 程序調(diào)試期間,記錄運(yùn)行的步驟和運(yùn)行;
- 多個(gè)日志的輸出源,比如到數(shù)據(jù)庫、eclipse控制臺(tái),或者日志文件到linux服務(wù)器下等。
- Log4j常用配置文件有以下兩種方式:
- log4j.properties
- log4j.xml
Log4j日志級(jí)別
Log4j日志級(jí)別有以下幾種:
- OFF 最高等級(jí),用于關(guān)閉所有日志記錄;
- FATAL 指出每個(gè)嚴(yán)重的錯(cuò)誤事件將會(huì)導(dǎo)致應(yīng)用程序的退出;
- ERROR 指出雖然發(fā)生錯(cuò)誤事件,但仍然不影響系統(tǒng)的繼續(xù)運(yùn)行;
- WARN 表明會(huì)出現(xiàn)潛在的錯(cuò)誤情形;
- INFO 一般和在粗粒度級(jí)別上,強(qiáng)調(diào)應(yīng)用程序的運(yùn)行全程;
- DEBUG 一般用于細(xì)粒度級(jí)別上,對(duì)調(diào)試應(yīng)用程序非常有幫助。
- ALL 最低等級(jí),用于打開所有日志記錄。
常用日志級(jí)別:
- 常用日志級(jí)別有:ERROR、WARN、INFO、DEBUG;
- 排列順序(從高到低):DEBUG < INFO < WARN < ERROR;
- 日志打印規(guī)則: 打印自身往后靠。
獲取方式
private static final Logger logger = Logger.getLogger(ClassName.class);
輸出源Appender、布局LayOut
- 輸出源Appender

輸出源
- 布局LayOut

布局
- Appender、Layout、Logger三者之間的關(guān)系:
- 每個(gè)appender后面必然需要跟隨layout,指定自己的風(fēng)格樣式 ;
- 每個(gè)Logger都可以指定一個(gè)級(jí)別,同時(shí)引用多個(gè)Appender;
- 每個(gè)Appender也同時(shí)可以被多個(gè)Logger引用。
配置文件設(shè)置
rootLogger(配置根logger)
rootLogger語法:
log4j.rootLogger = [ level], appenderName1, appenderName2, appenderNameN
說明:
1. level為日志記錄的優(yōu)先級(jí);
2. appenderName為日志的輸出地方;
例如:
log4j.appender.appenderName1 = org.apache.log4j.ConsoleAppender
appender(配置日志輸出目的地)
appender語法:
# 控制臺(tái)
log4j.appender.appenderName = org.apache.log4j.ConsoleAppender
# 文件
log4j.appender.appenderName = org.apache.log4j.FileAppender
# 每天產(chǎn)生一個(gè)日志文件
log4j.appender.appenderName = org.apache.log4j.DailyRollingFileAppender
# 文件大小到達(dá)指定尺寸的時(shí)候產(chǎn)生一個(gè)新的文件
log4j.appender.appenderName = org.apache.log4j.RollingFileAppender
# 將日志信息以流格式發(fā)送到任意指定的地方
log4j.appender.appenderName = org.apache.log4j.WriterAppender
# 把日志用JDBC記錄到數(shù)據(jù)庫中
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
# 包含日志信息的級(jí)別和信息字符串
log4j.appender.appenderName.layout = org.apache.log4j.SimpleLayout
# 包含日志產(chǎn)生的時(shí)間、線程、類別等等信息
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}
都是成對(duì)出現(xiàn)的;
配置文件常用選項(xiàng)屬性
- ConsoleAppender選項(xiàng)屬性
Threshold=DEBUG: 指定日志消息的輸出最低層次;
ImmediateFlush=true: 默認(rèn)值是true,意謂著所有的消息都會(huì)被立即輸出;
Target=System.err:默認(rèn)值System.out,輸出到控制臺(tái)(err為紅色,out為黑色)。
- FileAppender選項(xiàng)屬性
Threshold=DEBUF:指定日志消息的輸出最低層次;
ImmediateFlush=true:默認(rèn)值是true,意謂著所有的消息都會(huì)被立即輸出;
File=mylog.txt:指定消息輸出到mylog.txt文件;
Append=false:默認(rèn)值是true,將消息追加到指定文件中,false指將消息覆蓋指定的文件內(nèi)容;
Encoding = UTF-8:可以指定文件編碼格式。
- DailyRollingFileAppender選項(xiàng)屬性
Threshold = WARN: 指定日志消息的輸出最低層次;
ImmediateFlush = TRUE: 默認(rèn)值是true,所有的消息都會(huì)被立即輸出;
File = C:log4j.log:指定消息輸出到C:log4j.log文件;
Append = FALSE:默認(rèn)值true,將消息追加到指定文件中,false指將消息覆蓋指定的文件內(nèi)容;
Encoding = UTF-8:可以指定文件編碼格式;
DatePattern='.'yyyy-ww:每周滾動(dòng)一次文件,即每周產(chǎn)生一個(gè)新的文件。
其中DatePattern還可以是以下參數(shù)文件:
'.'yyyy-MM:每月
'.'yyyy-ww:每周
'.'yyyy-MM-dd:每天
'.'yyyy-MM-dd-a:每天半天
'.'yyyy-MM-dd-HH:每小時(shí)
'.'yyyy-MM-dd-HH-mm:每分鐘
- RollingFileAppender選項(xiàng)屬性
Threshold = ERROR:指定日志消息的輸出最低層次;
ImmediateFlush = TRUE:默認(rèn)值是true,所有的消息都會(huì)被立即輸出;
File = C:/log4j.log:指定消息輸出到C:/log4j.log文件;
Append = FALSE:默認(rèn)值true,將消息追加到指定文件中,false指將消息覆蓋指定的文件內(nèi)容;
MaxFileSize = 100KB:后綴可以是KB,MB,GB.在日志文件到達(dá)該大小時(shí),將會(huì)自動(dòng)滾動(dòng);例如:log4j.log.1
MaxBackupIndex = 2:指定可以產(chǎn)生的滾動(dòng)文件的最大數(shù);
Encoding = UTF-8:可以指定文件編碼格式。
- HTMLLayout選項(xiàng)屬性
LocationInfo = TRUE:默認(rèn)值false,輸出java文件名稱和行號(hào)
Title=Struts Log Message:默認(rèn)值 Log4J Log Messages
- PatternLayout選項(xiàng)屬性
ConversionPattern = %m%n:格式化指定的消息
- XMLLayout選項(xiàng)屬性
LocationInfo = TRUE:默認(rèn)值false,輸出java文件名稱和行號(hào)
配置文件Log4j.properties和Log4j.xml優(yōu)先級(jí)
- log4j.xml優(yōu)先于log4j.properties;
- log4j.xml的優(yōu)勢(shì):
1. filter精確匹配,避免往后靠的大于等于,可以O(shè)nlyOne過濾出我需要的;
2. additivity="false"精確匹配,停止傳播。