Log4J引入
在我們編寫Java代碼的時候,經常會用System.out.println(“”)來輸出一些語句,來幫助我們檢查代碼運行是否正確,但是,當我們提交代碼的時候,又會將這些輸出語句註釋或者刪除掉,很容易出現遺漏的情況。在這樣的使用前景下,就有了Log4J這個日誌管理工具,他是Apache的一個開源項目,我們可以在http://logging.apache.org/log4j/1.2/download.html 中下載Log4J的相關資料。他能夠版我們管理日誌,管理日誌的輸出格式,管理日誌的輸出目的地(即在控制檯輸出,還是在文本文件中輸出)。
簡單的使用示例
public void fun1(){
Logger logger = Logger.getLogger(SimpleDemo.class); // SimpleDemo爲這個類的名字
logger.addAppender(new ConsoleAppender(new SimpleLayout()));
logger.setLevel(Level.WARN);
logger.debug("Debug");
logger.info("Info");
logger.warn("Warn");
logger.error("Error");
logger.fatal("Fatal");
}
運行這個方法前,我們需要導入Log4j需要的庫文件(log4j-1.2.17.jar)。運行這個方法,我們會發現,他並沒有將所有的輸出信息輸出出來,而只輸出了Warn,Error,Fatal這三個,這就涉及到日誌級別的問題。
日誌級別
日誌級別 | 描述 |
---|---|
FATAL | 重大錯誤,例如系統崩潰 |
ERROR | 錯誤,例如某模塊癱瘓 |
WARN | 警告,程序的隱患,如果不處理,將來可能就是錯誤 |
INFO | 信息,可以用來查看程序執行的流程 |
DEBUG | 調試,用來調試程序的bug |
以上是從高到底的順序列舉了日誌級別,Log4J使用Logger的setLevel()方法設置日誌級別,輸出的規則是將日誌級別大於等於當前設置的級別的日誌輸出,默認爲DEBUG
Log4J三個核心
Log4J的三大核心是Logger(日誌器),Appender(日誌輸出目標),Layout(格式化器),要使用Log4J,先要設置這三個參數:
Logger:用來輸出日誌消息的類,它可以輸出不同級別的消息,例如錯誤消息、警告消息等;
Appender:通常我們希望日誌輸出到文件中,以及控制檯,也可能希望日誌輸出數據庫,該類就表示一個輸出的目標;
Layout:對輸出的消息進行格式化,例如在消息中添加日期,以及級別等。
配置文件
我們可以通過配置文件的方式去配置Log4J,而不需要在代碼中去設定他的Appender,Layout等信息,他支持log4j.properties和log4j.xml兩種格式的配置文件,他們都需要被創建在src目錄下,通常使用log4j.properties比較簡便。
#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表示簡化格式化器。
除了設置根日誌器(rootLogger),我們還可以設置其他的日誌器
#log4j.properties
log4j.rootLogger=DEBUG,A1
log4j.logger.mylogger=WARN,A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.SimpleLayout
這個配置文件還設置了一個名爲mylogger的日誌器,我們可以通過
Logger logger = Logger.getLogger(“mylogger”);獲取到這個日誌器
Appender
Appender是用來指定輸出目標的類,我們可以叫他目的地,Log4J中常用的目的地有如下幾種:
ConsoleAppender:向控制檯輸出日誌
他的配置就不多做解釋了
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
File表示日誌文件的名稱,Append表示已追加的方式添加日誌
DailyRollingFileAppender:向文件輸出日誌,每天一個日誌文件;
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
RollingFileAppender:向文件輸出日誌,當文件大小達到指定大小後,生成新文件;
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
PatternLayout
通常,我們都是使用PatternLayout作爲Layout的,他可以指定一個模板,讓日誌根據模板輸出,模板字符如下:
%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