【零碎JAVA】Log4J 教程

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

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