2009-12-30 71 views
15

什麼是編碼時使用log4j級別的最佳做法。 我的意思是什麼時候我們使用INFO日誌記錄,何時使用DEBUG日誌記錄/錯誤日誌記錄等。log4J級別的使用

+1

相當主觀的。也許社區Wiki將是適當的? – bmargulies 2009-12-30 04:04:50

回答

7

最好的學習方式是通過示例。閱讀一些開源事物的來源,例如,哦,Tomcat或任何在你的應用領域,看看你看到什麼。

+0

休眠是另一個很好的參考 – 2009-12-30 04:58:27

+0

休眠實際上不是這樣一個偉大的IMO參考,請參閱我的答案中的鏈接。我認爲春天是一個很好的例子,以及石英,axis2和類似的項目 – Yoni 2009-12-31 07:25:40

0

錯誤日誌記錄應該始終處於打開狀態。

INFO + DEBUG在追蹤問題/錯誤時應該打開。

+0

他是指'使用',如'啓用'或'使用',如'我在什麼時候打電話'? – bmargulies 2009-12-30 04:06:56

+0

嗯,好點! – 2009-12-30 04:08:03

+0

感謝您的回覆。 從您的迴應中,我讀到ERROR是生產中應該使用的級別,INFO/DEBUG需要根據故障排除情況下的要求進行設置。 Pleae澄清我是否正確。 – 2009-12-30 04:09:03

18

一般情況下,我遵循以下原則:

  • DEBUG:低層次的東西。高速緩存命中,高速緩存未命中,開放數據庫連接
  • 信息:有商業意義的事件 - 創造顧客,充電CC ...
  • WARN:可能是一個問題,但不會停止你的應用程序。電子郵件地址未找到/無效
  • 錯誤:意外的問題。無法打開數據庫連接。等等...
+0

log4j也有一個[致命](https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/Level.html#FATAL)級別和一個[TRACE](https://日誌記錄。 apache.org/log4j/1.2/apidocs/org/apache/log4j/Level.html#TRACE)級別。對於log4j2見[此頁](https://logging.apache.org/log4j/2.0/log4j-api/apidocs/org/apache/logging/log4j/Level.html) – 2016-10-08 01:07:48

10

我的底線始終是INFO水平相當於到System.out,和錯誤相當於System.err的。

調試 - 在這裏,您可以放置​​所有跟蹤信息,特別是當您的「舒適級別」爲system.out時不希望看到的信息。

信息 - 使用這一個用於應用程序相關消息的一般消息,進度消息,但不用於跟蹤。

WARN - 提供報警,什麼是錯,也許是意外,或者一種解決方法是使用,但是應用程序仍然可以繼續(套接字超時/重試,無效的用戶輸入等)。

錯誤 - 關於阻止您的應用正常繼續的問題的警報,例如,數據庫已關閉,缺少引導程序配置。

編寫庫時常見的錯誤是使用ERROR級別來指示調用應用程序(使用庫的代碼)的問題,而不是指示庫本身內的實際錯誤。例如,看看這個休眠錯誤 - >http://opensource.atlassian.com/projects/hibernate/browse/HHH-3731

這真的很煩人,因爲來自ERROR級別的消息實際上很難抑制,所以只能用它們來表示您自己的代碼存在問題。

全部 - 我沒有真正使用這個,它幾乎和DEBUG或TRACE一樣。

+0

另外,NHibernate的使用INFO級別記錄每它生成的SQL語句令人惱火,因爲我傾向於在生產系統中默認保留INFO。這應該是DEBUG恕我直言。 – Andy 2012-05-21 08:18:21

+0

我同意意義列表,但是我對System.out/err有很不同的理解(這是基於Unix shell的:out是用於「用戶希望的輸出」,而err是「可能會幫助如果應用程序執行日誌記錄需要修復「。因此,所有* log4j輸出是System.err的東西;命令行應用程序將他們的System.out的東西發送到System.out; webapps發送他們的System.out的東西到網絡響應DTO)。刪除或忽略「我的基準」段落可能更好。 – jackr 2018-01-26 19:53:12

0

對於別人提到的,我會添加TRACE和FATAL級別,前者對於非常詳細的日誌記錄非常有用,後者則表示總顯示停止。正如上面提到的那樣,關於如何使用關卡的通用指南。然而,最重要的是如何使用它以及如何解釋這些數據。您需要關注問題的級別,因此請確定您的案例中存在什麼問題。您的用戶幾乎不需要跟蹤或調試語句,但他們肯定會想出問題並將其報告給您。

2

儘管這個問題很老,這確實是每個開發者都應該知道的重要的一點,我強烈建議您檢查Apache log4j的官方頁面。

而且我發現和有用的圖像描述這個完美,從supportweb.cs.bham.ac.uk/documentation/tutorials/docsystem/build/tutorials/log4j/log4j.html

2

TRACE採取log4jImage: 最低級別的日誌。提供最詳細的信息。

調試: 這裏的日誌聲明旨在幫助開發人員。您的應用程序的詳細狀態。

信息: 一般商業信息。您的應用程序的進度和狀態

警告: 有關意外事件的警告。這些不夠嚴重,不能放棄你的申請。

錯誤: 您的應用程序中存在嚴重問題。

在不同的環境中打開適當的日誌級別同樣重要。

0

這裏有一些指引我用:

  • TRACE:詳細日誌記錄非常低級別的調試,事情通常我不會需要在日誌中看到,除非有一些非常模糊或不尋常的問題。
  • DEBUG:僅供開發人員使用的記錄 - 變量內容,比較結果以及幫助調試業務邏輯的其他信息位。

  • 信息:諸如任務X的高級信息現在已經完成或者某個規則得到滿足,這就是我要接下來要做的事,因爲這個規則。

  • WARN:可能有問題,但對業務邏輯的流程沒有任何實際的傷害。例如,也許某個變量有時會變爲空,但我們不一定需要它,或者我們可以以某種方式解決它。同時,我們仍然想知道這件事情,以防萬一我們以後告訴我們需要找到它的例子或更仔細地調查它爲什麼發生。

  • 錯誤:一個嚴重的問題,肯定需要進一步調查,但不夠嚴重,不足以阻止應用程序完成手頭的任務。

  • 致命的:一個非常嚴重的意外問題,我們無法解決或恢復,甚至可能阻止應用程序做一些有用的事情。