根據我的經驗,日誌被用作正確測試和調試代碼的替代品。程序員自言自語道:「我不能確定這段代碼是否正常工作,所以我會在其中添加日誌消息,所以當它失敗時,我可以使用日誌消息來找出錯誤。」
不要只是在沒有想到的情況下噴灑日誌消息,而應將每條日誌消息視爲軟件用戶界面的一部分。 DBA,網站管理員或系統管理員的用戶界面,但仍是用戶界面的一部分。每條消息都應該做一些有用的事該信息應該是行動的動力,或者提供他們可以使用的信息。如果消息無法使用,請不要記錄。
爲每條消息提供適當的日誌記錄級別。如果消息沒有描述實際問題,也沒有提供通常有用的狀態信息,則該消息可能僅用於調試,因此將其標記爲DEBUG或TRACING消息。你平常的Log4J配置根本不應該寫這些消息。只有在調試問題時,才能更改配置以寫入它們。
您提到這些消息是由於經常發生的異常。並非所有的例外都表明程序中存在錯誤,甚至是程序運行中的問題。您應該記錄全部異常,指出程序中存在錯誤,並記錄堆棧跟蹤。在很多情況下,你幾乎需要找出錯誤的原因。如果您擔心的異常是由於錯誤引起的,那麼您將重點放在錯誤的問題上:您應該修復錯誤。如果一個異常沒有在你的程序中指出一個錯誤,你不應該爲它記錄一個堆棧跟蹤。堆棧跟蹤僅適用於試圖調試問題的程序員。如果該例外根本沒有指出問題,則根本不需要登錄。
什麼樣的例外?如果這是你可以修復或改進的東西,那麼考慮你可能試圖治療症狀而不是問題。您也可以考慮使用[FileHandler](http://docs.oracle.com/javase/7/docs/api/java/util/logging/FileHandler.html)來使用循環日誌。您可以指定日誌文件的數量及其最大大小,並通過它們進行旋轉。另外,考慮讓你的代碼像@TimB所建議的那樣按常規壓縮日誌。 – turbo