C 程式設計最佳實踐 二十 日誌與日誌級別

2021-09-27 08:18:27 字數 2347 閱讀 7420

在日常的開發中我們經常會用到日誌,最近開發的時候老是聽到別的其他開發人員讓測試把日誌級別從debug降到info或者等等之類的,所以就比較好奇日誌級別到底有哪幾種以及各種日誌級別到底是怎麼發揮作用的呢?於是看了下公司的原始碼,發現我們的log類是繼承自log4net的,所以簡單學習下該類。

在log4net中有7種日誌級別,其中常用的有5種: debug,info,warn,error,fatal。級別從低到高,依照等級次序決定是否寫入。

日誌級別

備註all level

all level是最低等級的,用於開啟所有日誌記錄。

debug leveldebug level指出細粒度資訊事件對除錯應用程式是非常有幫助的。記錄系統用於除錯的一切資訊,內容或者是一些關鍵資料內容的輸出。

info levelinfo level表明 訊息在粗粒度級別上突出強調應用程式的執行過程。

warn levelwarn level表明會出現潛在錯誤的情形。 記錄系統中不影響系統繼續執行,但不符合系統執行正常條件,有可能引起系統錯誤的資訊。例如,記錄內容為空,資料內容不正確等。

error levelerror level指出雖然發生錯誤事件,但仍然不影響系統的繼續執行。記錄系統**現的導致系統不穩定,部分功能出現混亂或部分功能失效一類的錯誤。例如,資料字段為空,資料操作不可完成,操作出現異常等。

fatal levelfatal level指出每個嚴重的錯誤事件將會導致應用程式的退出,記錄系統**現的能使用系統完全失去功能,服務停止,系統崩潰等使系統無法繼續執行下去的錯誤。例如,資料庫無法連線,系統出現死迴圈

off level

off level是最高等級的,用於關閉所有日誌記錄。

高於等級設定值方法都能寫入日誌, off所有的寫入方法都不寫到日誌裡,all則相反。例如當我們設成info時,logger.debug就會被忽略而不寫入檔案,但是fatal,error,warn,info會被寫入,因為他們等級高於info。在生產環境,建議把debug的日誌級別重新調為warn或者更高,避免產生大量日誌

日誌級別了解後需要在系統內加乙個日誌的配置檔案:log4net.config。

<?xml version="1.0" encoding="utf-8" ?>

整個步驟其實就是先引入log4net的dll,然後引入到自己的專案中來,然後新增配置到 assemblyinfo.cs檔案:

[assembly: log4net.config.xmlconfigurator(configfile="log4net.config", watch=true)]
部分log4net的原始碼,不僅僅包括各種異常的定義,也包含一些異常打點的標準格式方法。

// decompiled with jetbrains decompiler

// type: log4net.ilog

// assembly: log4net, version=1.2.9.0, culture=neutral, publickeytoken=b32731d11ce58905

// mvid: 4bfebc64-fd47-43b4-b376-302a10c947e5

// assembly location: d:\multitenant專案\packages\log4net.1.2.10.1\lib\net11\log4net.dll

using log4net.core;

using system;

namespace log4net

bool isinfoenabled

bool iswarnenabled

bool iserrorenabled

bool isfatalenabled

}}

最後總結下關於日誌的一些收穫:

總而言之,常用的日誌級別其實就四種:debug,info,warn,error。然後我們大多數情況下只關心error就可以,如果有時候通過error定位不出問題,name通過修改配置檔案將列印的日誌級別降低為warn(可以看warn,error)或者info(可以看info,warn,error)甚至debug(可以看debug,info,warn,error)來獲取更多的資訊,所以我常聽到的開發讓測試同學修改日誌級別就明白了,調的越低能看到更多的輔助查問題的資訊然後來查問題

C程式設計最佳實踐

意想不到的麻煩。各種 c 實現通常在某些方面各有不同。堅持使用語言中可能對所有實現都是公共的部分會有幫助。通過這樣做,您更容易將程式移植到新的機器或編譯器,並且不大會遇到編譯器特殊性所帶來的問題。例如,考慮字串 2 1 這裡利用了 最大適合 maximal munch 規則。如果可以巢狀注釋,則可將...

C 程式設計最佳實踐 二 git操作實踐

本篇用於總結工作中常用的git操作,持續更新 1,將自己的git add 到快取,然後git commit m 單元測試 到本地倉庫 2,然後用自己的分支合併git merge dev wuwei,然後再看一下 3,解決衝突,vim或者notpad 4,再次git add 到快取,然後git com...

java程式設計最佳實踐

不應該像下面這樣 string ordername urlencoder.encode 這裡是中文 constant.charset utf finally語句只能做如下事件 1 關閉io資源,比如關閉inputstream或socket 2 只做列印錯誤資訊,捕獲異常,不要丟擲異常 儲存在資料庫中...