關於log日誌級別的使用經驗

2021-07-29 03:04:17 字數 1533 閱讀 9235

**

軟體中總免不了要使用諸如 log4net, log4j, tracer 等東東來寫日誌,不管用什麼,這些東東大多是大同小異的,一般都提供了這樣5個日誌級別:

× debug

× info

× warn

× error

× fatal

乙個等級比乙個高,但是在具體開發中,關於應該如何選擇適應的等級,卻沒有找到好的文章進行說明。記錄一下自己的一些看法,以便日後使用吧。

=== debug ===

這個級別最低的東東,一般的來說,在系統實際執行過程中,一般都是不輸出的。

因此這個級別的資訊,可以隨意的使用,任何覺得有利於在除錯時更詳細的了解系統執行狀態的東東,比如變數的值等等,都輸出來看看也無妨。

當然,在每乙個 debug 呼叫之前,一定要加上 if 判斷。

=== info ===

這個應該用來反饋系統的當前狀態給終端使用者的,所以,在這裡輸出的資訊,應該對終端使用者具有實際意義,也就是終端使用者要能夠看得明白是什麼意思才行。

從某種角度上說,info 輸出的資訊可以看作是軟體產品的一部分(就像那些互動介面上的文字一樣),所以需要謹慎對待,不可隨便。

=== warn、error、fatal ===

警告、錯誤、嚴重錯誤,這三者應該都在系統執行時檢測到了乙個不正常的狀態,他們之間的區別,要區分還真不是那麼簡單的事情。我大致是這樣區分的:

所謂警告,應該是這個時候進行一些修復性的工作,應該還可以把系統恢復到正常狀態中來,系統應該可以繼續執行下去。

所謂錯誤,就是說可以進行一些修復性的工作,但無法確定系統會正常的工作下去,系統在以後的某個階段,很可能會因為當前的這個問題,導致乙個無法修復的錯誤(例如宕機),但也可能一直工作到停止也不出現嚴重問題。

所謂fatal,那就是相當嚴重的了,可以肯定這種錯誤已經無法修復,並且如果系統繼續執行下去的話,可以肯定必然會越來越亂。這時候採取的最好的措施不是試圖將系統狀態恢復到正常,而是盡可能地保留系統有效資料並停止執行。

也就是說,選擇 warn、error、fatal 中的具體哪乙個,是根據當前的這個問題對以後可能產生的影響而定的,如果對以後基本沒什麼影響,則警告之,如果肯定是以後要出嚴重問題的了,則fatal之,拿不準會怎麼樣,則 error 之。

=== 一些疑惑 ===

不過在實際使用中,基於上面的這種考慮,也還是有一些具體問題。最常見的就是要在最終產品中將輸出日誌開啟到那種級別才算好呢?

例如在應用中有乙個輸出視窗,一些系統狀態資訊將被輸出到這個輸出視窗中。因為 info 的級別是如此之低,所以為了讓使用者能夠看到有效的輸出資訊,必須將日誌級別開放到 info 級別。但是 warn 的級別比 info 要高,所以使用者不得不被迫看到一些 warn 的資訊。而我們其實已經假定,warn 資訊其實並不影響系統的正常執行,這一般只代表系統中存在一些還沒有被發現或者修改的小 bug。這些 warn 資訊會讓終端使用者困惑甚至恐慌,系統發出警告了,該怎麼辦?

個人觀點,info 的級別應該比 warn 更高才對,warn 資訊和 debug 一樣,應該在產品測試和除錯時使用,而 info、erro 以及 fatal 則在產品發布後需要繼續使用。

LOG4J中日誌級別的使用

log4j中 分為off fatal error warn info debug trace all或者您定義的級別。log4j建議僅僅使用四個級別。優先順序從高到低各自是error warn info debug。通過在這裡定義的級別,您能夠控制到應用程式中對應級別的日誌資訊的開關。比方在這裡定義...

Log 日誌級別

日誌記錄器 logger 是日誌處理的核心元件。log4j具有5種正常級別 level 1.static level debug debug level指出細粒度資訊事件對除錯應用程式是非常有幫助的。2.static level info info level表明 訊息在粗粒度級別上突出強調應用程式...

Log 日誌級別

日誌記錄器 logger 是日誌處理的核心元件。log4j具有5種正常級別 level 1.static level debug debug level指出細粒度資訊事件對除錯應用程式是非常有幫助的。2.static level info info level表明 訊息在粗粒度級別上突出強調應用程式...