1、log4j配置概述
log4j有兩種配置文件,log4j.properties和log4j.xml。因爲log4j是比較簡單的組件,所以建議使用log4j.properties。
如果你把log4j放到項目的src下(即放到classes下),並且命名爲log4j.properties,那麼log4j會自動加載這個配置文件,這也是我們最爲常用的方式。
2、根日誌器
在配置文件中,需要配置名爲log4j.rootLogger的日誌器,它就是根日誌器。其他的日誌器都是根日誌器的子日誌器,會繼承根日誌器的目的地,以及級別等。
log4j.properties
log4j.rootLogger=DEBUG,A1 log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.layout=org.apache.log4j.SimpleLayout |
對上面進行解釋:
log4j.rootLogger表示根日誌器,DEBUG是指定根日誌器的輸出級別,只要大於等於DEBUG級別的日誌就可以輸出。A1是說明目的地(Appender)的名稱;
log4j.appender.A1表示目的地,org.apache.log4j.ConsoleAppender表示目的地爲控制檯目的地,即輸出結果在控制檯上顯示;
log4j.appender.A1.layout表示A1這個目的地的格式化器,org.apache.log4j.SimpleLayout表示簡化格式化器。
然後我們在Java中就可以這樣子寫了:public void fun1() {
Logger log = Logger.getLogger(Demo1.class);
log.debug("Hello");
}
3、其他日誌器
當然,也可以去配置其他的日誌器,語法如下:
log4j.rootLogger=DEBUG,A1 log4j.logger.com.luowg=WARN,A1 log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.layout=org.apache.log4j.SimpleLayout |
我們不只配置了一個根日誌器,還配置了一個名稱爲com.chj的日誌器。繼承關係你是懂得對吧。所有日誌器如果名稱是以com.chj前綴的,那麼都會繼承上面的配置,如果不是,那麼繼承的就是root日誌器了。
我們下面對配置文件中的名詞進行解釋,有一部分是從網上借鑑過來的:
1、Appender
Appender是用來指定輸出目標的類,你可以叫它目的地。上面我們使用的ConsoleAppender就是用來向控制檯輸出的目的地。常用的目的地有:
ConsoleAppender:向控制檯輸出日誌;
FileAppender:向文件輸出日誌
DailyRollingFileAppender:向文件輸出日誌,每天一個日誌文件;
RollingFileAppender:向文件輸出日誌,當文件大小達到指定大小後,生成新文件;
ConsoleAppender的目標是控制檯!這也不多做解釋
log4j.rootLogger=DEBUG,A1 log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.layout=org.apache.log4j.SimpleLayout |
FileAppender的目標是磁盤文件
log4j.rootLogger=DEBUG,A1 log4j.appender.A1=org.apache.log4j.FileAppender log4j.appender.A1.File=log.txt log4j.appender.A1.Append=true log4j.appender.A1.layout=org.apache.log4j.SimpleLayout |
RollingFileAppender是FileAppender的子類
它的作用是當日志文件大小超出文件大小大限時,會把日誌文件轉換成備份文件,然後再生成一個新的日誌文件。
例如日誌文件名爲log.txt,設置文件大小上限爲1KB,當log.txt文件的大小超出了1KB後,把log.txt的名稱轉換成log.txt.1,然後再生成一個log.txt,新的日誌會寫入到新的log.txt文件中。當log.txt的大小再次達到1KB時,把log.txt.1名稱修改成log.txt.2,把log.txt修改成log.txt.1,然後再生成一個新的log.txt文件。
還可以設置文件的個數,當設置備份文件的個數爲3時,表示最多可以有3個文件。當文件達到3後,再次達到1KB時,那麼會刪除最後一個文件。例如當前已經存在log.txt、log.txt.1、log.txt.2,這時如果log.txt又達到了1KB時,那麼刪除log.txt.2,然後把log.txt.1修改成log.txt.2,再把log.txt修改成log.txt.1,然後再創建log.txt文件。
log4j.rootLogger=DEBUG,A1 log4j.appender.A1=org.apache.log4j.RollingFileAppender log4j.appender.A1FILE.File=log.txt log4j.appender.A1.MaxFileSize=1KB log4j.appender.A1.MaxBackupIndex=3 log4j.appender.A1.layout=org.apache.log4j.SimpleLayout |
DailyRollingFileAppender會根據設定的時間頻率生成備份文件。
當時間頻率爲yyyy-MM:按月生成備份文件;
當時間頻率爲yyyy-ww:按周生成備份文件;
當時間頻率爲yyyy-MM-dd:按天生成備份文件;
當時間頻率爲yyyy-MM-dd-a:每天生成兩次備份;
當時間頻率爲yyyy-MM-dd-HH:按小時生成備份文件;
當時間頻率爲yyyy-MM-dd-HH-mm:按分鐘生成備份文件。
log4j.rootLogger=DEBUG,A1 log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender log4j.appender.A1.File=log.txt log4j.appender.A1.DatePattern='.'yyyy-MM-dd log4j.appender.A1.layout=org.apache.log4j.SimpleLayout |
2、Layout
Layout種類
我們需要給目的地指定格式化器,這樣目的地就可以按照格式化器指定的格式來輸出日誌信息了。我們剛剛一直都在使用SimpleLayout格式化器,而我們常用的格式化器是PatternLayout!
PatternLayout
可以爲PatternLayout指定一個模板,目的地會按模板來輸出日誌信息。例如模板爲:hello: %m,其中%m是一個模式字符,下面介紹一下模式字符:
%m:信息本身;
%c:日誌器的名稱;
%d:日期,還可以指定日期的格式,例如:%d{yyyy-MM-dd HH:mm:ss};
%p:日誌級別;
%n:換行;
%t:當前線程;
%l:輸出日誌的Java類相關信息。
在web項目中的配置
log4j.rootLogger=INFO,c1, f1
log4j.appender.c1=org.apache.log4j.ConsoleAppender log4j.appender.c1.layout=org.apache.log4j.PatternLayout log4j.appender.c1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p] %m [%t] %c [%l]%n
log4j.appender.f1.File=${catalina.home}/logs/myproject.txt log4j.appender.f1=org.apache.log4j.DailyRollingFileAppender log4j.appender.f1.layout=org.apache.log4j.PatternLayout log4j.appender.f1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p] %m [%t] %c [%l]%n |
下面這個是我的配置文件,對其中都加了註釋說明的了:
#debug 調試,用來調試程序的bug。
#根日誌器。其他的日誌器都是根日誌器的子日誌器,會繼承根日誌器的目的地,以及級別等
#只要大於等於INFO級別的日誌就可以輸出。c1和A1,f1是說明目的地(Appender)的名稱;
log4j.rootLogger=INFO,c1,A1,f1
#ConsoleAppender日誌輸出到控制檯
log4j.appender.c1=org.apache.log4j.ConsoleAppender
#表示c1這個目的地的格式化器,org.apache.log4j.PatternLayout是我們常用的格式化器
log4j.appender.c1.layout=org.apache.log4j.PatternLayout
log4j.appender.c1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p] %m [%t] %c [%l]%n
#RollingFileAppender是FileAppender的子類,
#它的作用是當日志文件大小超出文件大小大限時,會把日誌文件轉換成備份文件,然後再生成一個新的日誌文件。
log4j.appender.A1=org.apache.log4j.RollingFileAppender
#:指定日誌消息的輸出最低層次。
log4j.appender.A1.Threshold=info
#:默認值是true,意謂着所有的消息都會被立即輸出。
log4j.appender.A1.ImmediateFlush=true
log4j.appender.A1.File=d\://logs/log.txt
# 在日誌文件到達該大小時,將會自動滾動,即將原來的內容移到log.txt.1文件。
log4j.appender.A1.MaxFileSize=1KB
#指定可以產生的滾動文件的最大數。
log4j.appender.A1.MaxBackupIndex=3
log4j.appender.A1.layout=org.apache.log4j.SimpleLayout
#DailyRollingFileAppender會根據設定的時間頻率生成備份文件。
log4j.appender.f1=org.apache.log4j.DailyRollingFileAppender
#:指定日誌消息的輸出最低層次。
log4j.appender.f1.Threshold=info
#:默認值是true,意謂着所有的消息都會被立即輸出。
log4j.appender.f1.ImmediateFlush=true
#log4j.appender.f1.File=/WEB-INF/logs/file.log
log4j.appender.f1.File=d://logs/file.log
#DatePattern='.'yyyy-ww:每週滾動一次文件,即每週產生一個新的文件。當然也可以指定按月、周、天、時和分
#即對應的格式如下:
#'.'yyyy-MM: 每月
#'.'yyyy-ww: 每週
#'.'yyyy-MM-dd: 每天
#'.'yyyy-MM-dd-a: 每天兩次
#'.'yyyy-MM-dd-HH: 每小時
#'.'yyyy-MM-dd-HH-mm: 每分鐘
log4j.appender.f1.DatePattern='.'yyyy-MM-dd
log4j.appender.f1.layout=org.apache.log4j.PatternLayout
log4j.appender.f1.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} [%p] %m [%t] %c [%l]%n