log4j非同步日誌的配置和測試
日誌可以幫助我們分析故障原因,做些資料探勘的工作。最簡單的日誌方法,就是自己寫個寫檔案的方法,在需要打日誌的時候呼叫下,但是這顯然不可能在實際工程上用。還有個問題,就是頻繁地打日誌,會增加磁碟I/O,使得系統性能下降。這裡用log4j這個庫來部署一個含有日誌管理的輕量級的系統,主要支援日誌的非同步寫和等級分類的功能,完成最低限度的日誌需求。
首先,我們建立一個Maven工程,並且在pom.xml檔案裡面引入log4j的依賴:
<dependency>
<groupId>org.slf4j</groupId>
<version>1.7.2</version>
</dependency>
接著,我們在src/main/resources路徑下面建立一個配置檔案:log4j.xml
其實xml配置檔案的內容是至關重要的,裡面必須定義日誌的等級、是否非同步等屬性。這裡我通過截圖來簡單說明幾個關鍵點。完整的配置檔案會隨這篇部落格一起上傳。
這裡關於日誌等級需要多解釋一下,這裡的日誌等級預設是debug:
這張圖需要解釋的不多,主要是非同步日誌的配置。
那麼到這裡,日誌的配置基本就好了。而想要在程式裡面引用直接就寫成:
然後呼叫log.info,log.error等方法就可以寫日誌了。注意我們設了2KB的大小,因此日誌會累計到2KB再去寫。所以並不是實時的,但這樣可以減少頻繁的磁碟I/O,在壓測的時候可以避免由於I/O所帶來的CPU的損耗。
接著我們寫一段簡單的測試程式來驗證我們的配置是否正確。
這段程式碼的功能很簡單:迭代計數到10W,然後將10的倍數寫到error日誌裡,非10的倍數寫到info日誌裡面。執行該程式,就會在相應的檔案裡打印出響應的結果。具體的日誌結果如下圖:
需要注意的是,當天的日誌不會馬上加上日期,隔了一天後會顯示日期(如何馬上顯示當天的日期,樓主還沒搞定)。info和error日誌中的內容如下:
可見,通過我們之前之前的配置,我們可以按照我們的意思來正確地列印日誌。ok,就先寫到這裡。