1. 程式人生 > >J2EE--日誌記錄之log4j

J2EE--日誌記錄之log4j

公司的專案中有同事用到了log4j和slf4j,作為一名J2EE的小白,參考網上大神們的解釋和度娘百科,做一點記錄。本文先來記錄log4j。

log4j是一個強大的日誌記錄開源包,可以單單改變配置檔案,就能更改日誌的內容和格式,而不需要改變一點程式碼,這對開發者來說是十分方便的。其實度娘百科已經是十分詳細的了。

配置檔案設定

第一步

新建一個檔案,名為“log4j.properties”,這個檔案作為log4j的配置檔案,修改這個檔案將能改變很多東西。

第二步

1)寫入配置內容

log4j.rootCategory = INFO, stdout, file

log4j.appender
.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout = org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern = %n%-d{yyyy-MM-dd HH:mm:ss}%n[%p]-[Thread: %t]-[%C.%M()]: %m%n log4j.appender.file = org.apache.log4j.DailyRollingFileAppender log4j.appender.file
.File = ./demo_log4j.log log4j.appender.file.layout = org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern = %n%-d{yyyy-MM-dd HH:mm:ss}%n[%p]-[Thread: %t]-[%C.%M()]: %m%n log4j.appender.file.Threshold = INFO log4j.appender.file.DatePattern = '.'yyyy-MM-dd

2)配置說明
第一行,log4j.rootCategory = INFO, stdout, file


形式為:log4j.rootCategory = [level], appenderName, appenderName, …
這一句是將等級為INFO的日誌資訊輸出到stdout和file這個目的位置,stdout和file的定義在下面的程式碼中(分別為3~5行和7~10行),這兩個名字可任意。等級可分為OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL。一般來說都只是使用四個級別(按優先順序從高到低)分別是ERROR、WARN、INFO、DEBUG。設定一個級別,會把比它高的級別的日誌資訊也打印出來。

第三行,log4j.appender.stdout = org.apache.log4j.ConsoleAppender
這裡設定目的位置appender,可選的值有:
1. org.apache.log4j.ConsoleAppender(控制檯)
2. org.apache.log4j.FileAppender(檔案)
3. org.apache.log4j.DailyRollingFileAppender(每天產生一個日誌檔案)
4. org.apache.log4j.RollingFileAppender(檔案大小到達指定尺寸的時候產生一個新的檔案),可通過log4j.appender.stdout.MaxFileSize=100KB設定大小,也可通過log4j.appender.stdout.MaxBackupIndex=1設定為儲存一個備份檔案。其中stdout為appender的名稱。
5. org.apache.log4j.WriterAppender(將日誌資訊以流格式傳送到任意指定的地方)

第四行,log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
這裡設定日誌資訊的格式(佈局)Layout,可選的值有:
1. org.apache.log4j.HTMLLayout(以HTML表格形式佈局)
2. org.apache.log4j.PatternLayout(可以靈活地指定佈局模式)
3. org.apache.log4j.SimpleLayout(包含日誌資訊的級別和資訊的字串)
4. org.apache.log4j.TTCCLayout(包含日誌產生的時間、執行緒、類別等等資訊)

第五行,log4j.appender.stdout.layout.ConversionPattern = %n%-d{yyyy-MM-dd HH:mm:ss}%n[%p]-[Thread: %t]-[%C.%M()]: %m%n
這裡設定日誌規則,引數解釋如下:
1. %m:輸出程式碼中指定的資訊
2. %M:輸出列印該條日誌的方法名
3. %p:輸出優先順序,即DEBUG、INFO、WARN、ERROR、FATAL
4. %r:輸出自應用啟動到輸出該條日誌耗費的毫秒數
5. %c:輸出所屬的類目,通常就是所在類的全名
6. %t:輸出產生該日誌事件的執行緒名
7. %n:輸出一個回車換行符,Windows平臺為“rn”,Unix平臺為“n”
8. %d:輸出日誌時間點的日期或時間,預設格式為ISO8601,也可以在其後指定格式,比如:%d{yyyy-MM-dd HH:mm:ss,SSS},輸出類似:2015-07-21 23:06:34.325;
8. %l:輸出日誌事件的發生位置,
9. %L:在程式碼中的行數。
例子:%n[%d]-[%p]-[Thread:%t: %l]%n\u4FE1\u606F: %m%n,其中“\u4FE1\u606F”為“資訊”,則輸出為:
[2015-07-21 23:22:14,577]-[WARN]-[Thread:main: com.gaussli.Main.main(Main.java:15)]
資訊: a,其中“a”為輸出的自定義資訊。

第十一行,log4j.appender.file.Threshold = INFO
這裡設定只輸出輸出INFO級別以上的日誌,則例子中DEBUG資訊就不會寫入檔案了

第十二行,log4j.appender.file.DatePattern = ‘.’yyyy-MM-dd
這裡設定每日日誌生成字尾格式,方式有:
1. ‘.’ yyyy-MM:每月
2. ‘.’ yyyy-MM-dd:每日
3. ‘.’ yyyy-MM-dd-a:每日分兩次(半日)
4. ‘.’ yyyy-MM-dd-HH:每小時
5. ‘.’ yyyy-MM-dd-HH-mm:每分鐘
6. ‘.’ yyyy-ww:每週

Java程式碼呼叫

// 匯入log4j必要的包
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
public class Main {
    // 初始化日誌物件,輸入引數為當前類的類物件
    final Logger log = Logger.getLogger(getClass());

    public static void main(String[] args) {
        // 指定log4j的配置檔案
        PropertyConfigurator.configure("src\\resources\\log4j.properties");

        Main mainTest = new Main();
        // 呼叫debug日誌列印
        mainTest.log.debug("a");
        // 呼叫info日誌列印
        mainTest.log.info("a");
        // 呼叫warn日誌列印
        mainTest.log.warn("a");
        // 呼叫error日誌列印
        mainTest.log.error("a");
    }
}

至此,執行應用,在控制檯和本地的新增檔案“demo_log4j.log”中就能看到日誌資訊了。