1. 程式人生 > >log4j非同步日誌的配置和測試

log4j非同步日誌的配置和測試

日誌可以幫助我們分析故障原因,做些資料探勘的工作。最簡單的日誌方法,就是自己寫個寫檔案的方法,在需要打日誌的時候呼叫下,但是這顯然不可能在實際工程上用。還有個問題,就是頻繁地打日誌,會增加磁碟I/O,使得系統性能下降。這裡用log4j這個庫來部署一個含有日誌管理的輕量級的系統,主要支援日誌的非同步寫和等級分類的功能,完成最低限度的日誌需求。

首先,我們建立一個Maven工程,並且在pom.xml檔案裡面引入log4j的依賴:

<dependency>  
    <groupId>org.slf4j</groupId>  
   

<artifactId>slf4j-log4j12</artifactId>  
    <version>1.7.2</version>  
</dependency> 

接著,我們在src/main/resources路徑下面建立一個配置檔案:log4j.xml


其實xml配置檔案的內容是至關重要的,裡面必須定義日誌的等級、是否非同步等屬性。這裡我通過截圖來簡單說明幾個關鍵點。完整的配置檔案會隨這篇部落格一起上傳。


這裡關於日誌等級需要多解釋一下,這裡的日誌等級預設是debug:

。所以如果不像上圖中利用日誌過濾器來定義日誌等級,那麼最後ERROR日誌的會寫到INFO日誌的檔案裡,導致日誌管理混亂。所以需要來設定這個日誌等級的問題。


這張圖需要解釋的不多,主要是非同步日誌的配置。

那麼到這裡,日誌的配置基本就好了。而想要在程式裡面引用直接就寫成:

然後呼叫log.info,log.error等方法就可以寫日誌了。注意我們設了2KB的大小,因此日誌會累計到2KB再去寫。所以並不是實時的,但這樣可以減少頻繁的磁碟I/O,在壓測的時候可以避免由於I/O所帶來的CPU的損耗。


接著我們寫一段簡單的測試程式來驗證我們的配置是否正確。


這段程式碼的功能很簡單:迭代計數到10W,然後將10的倍數寫到error日誌裡,非10的倍數寫到info日誌裡面。執行該程式,就會在相應的檔案裡打印出響應的結果。具體的日誌結果如下圖:


需要注意的是,當天的日誌不會馬上加上日期,隔了一天後會顯示日期(如何馬上顯示當天的日期,樓主還沒搞定)。info和error日誌中的內容如下:


可見,通過我們之前之前的配置,我們可以按照我們的意思來正確地列印日誌。ok,就先寫到這裡。