5個日誌級別
轉載地址:http://blog.sina.com.cn/s/blog_7707993101010hap.html
軟體中總免不了要使用諸如 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 則在產品釋出後需要繼續使用。
目前我所採用的解決方法是,對於 Warn、Error、Fatal 都新增一個相應的系統斷言,這樣,可以保證當發生這種問題時,在除錯階段,可以立即得到提示。在軟體釋出以後,這些資訊也能被記錄到日誌檔案中去。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28371090/viewspace-759053/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Redis日誌級別Redis
- 【Logback日誌級別】動態調整Logback的日誌級別
- 日誌語言只需要兩個級別: INFO 和 ERRORError
- Golang:手擼一個支援六種級別的日誌庫Golang
- log4j日誌級別以及配置
- Confluence 6 log4j 日誌級別
- “Hack”阿里雲Kubernetes的Scheduler的日誌級別阿里
- log4j日誌輸出級別(轉)
- 如何開關資料庫告警日誌及修改日誌級別資料庫
- 5 個有用的開源日誌分析工具
- 【MySQL日誌】MySQL日誌檔案初級管理MySql
- 自定義Egg.js的請求級別日誌JS
- 開學日誌5
- 開發日誌5
- log4j日誌列印級別動態調整
- UBC SDK日誌級別重複率最佳化實踐
- Java日誌:您需要了解的4種日誌型別Java型別
- yolov5訓練日誌YOLO
- Linux系統級日誌系統Linux
- 輕量級日誌收集方案LokiLoki
- logback日誌級別動態切換的終極方案(Java ASM使用)JavaASM
- 企業級日誌分析系統——ELK
- Python中logging日誌等級有哪些Python
- Logback中使用TurboFilter實現日誌級別等內容的動態修改Filter
- 一個 JSer 的 Dart 學習日誌(五):基本資料型別JSDart資料型別
- 常見的錯誤日誌型別型別
- MySQL 日誌之 binlog 格式 → 關於 MySQL 預設隔離級別的探討MySql
- k8s各元件啟動時, -v引數指定的日誌級別K8S元件
- Spring Boot動態修改日誌級別Spring Boot
- 日誌分析-apache日誌分析Apache
- LogFX:JavaFX編寫一個漂亮、輕量級的日誌檢視器
- LogBack 日誌等級設定無效,原因竟然是因為這個?!
- 一個完整的go 日誌元件Go元件
- Spring Boot 學習筆記(5):日誌配置Spring Boot筆記
- 雲原生系列5 容器化日誌之EFK
- [日誌分析篇]-利用ELK分析jumpserver日誌-日誌拆分篇Server
- Scrapy的日誌等級和請求傳參
- C#輕量級日誌監控器EasyLogMonitorC#
- SpringBoot接入輕量級分散式日誌框架(GrayLog)Spring Boot分散式框架