關於日誌的那些事

2022-01-30 12:03:14 字數 1366 閱讀 8772

因為專案上線後不允許你除錯,你只能通過log來分析問題。專案出問題時,你要能拿出log證明自己負責的部分沒有問題,如果是自己的問題,要從log裡快速找出錯誤原因。如果沒有從log裡找出錯誤原因,那一定是一件很悲催的事情,特別是在bug不容易重現的情況下。

打log的目的是為了迅速排錯或在有爭議時拿出證據證明自己。基於這個目的,log不在多,只要抓住一切對自己有利的資訊,就可以了。

log最常用的級別就是debug,info,warn,error,其他的很少用。如何運用合適的log級別也是非常重要的,在不該用error的地方用了error,可能會給你帶來額外的麻煩。

1.error:

error是錯誤的意思,但不代表出現異常的地方就該打error。我認為error是相對程式正確執行來說的,如果出現了error那就代表出問題了,開發人員必須要查一下原因,或許是程式問題,或許是環境問題,或許是理論上不該出錯的地方出錯了。總之,如果你覺得某個地方出問題時需要解決,就打error,如果不需要解決就不要打error。

舉例來說,如果有乙個介面。呼叫者傳過來的引數不在你的接受範圍內,在這種情況下你不能打error,因為傳什麼值是使用者決定的,並不影響程式正確執行。想象一下,如果你的伺服器上有監控程式的話,檢測到error或warn就報警,引數錯誤你也打error,那運維人員會瘋掉的。

如果做乙個對講機,在解析語音資料報時出錯了,那就要打error了,因為這個是理論上不該出錯的地方,要不就是你的解析**有問題,要不就是開發人員在拼湊語音包時存在問題,這個時候需要你來找出問題的原因。所以應該打error。

2.warn:

warn是指出現了不影響程式正確執行的問題,warn也是問題但不影響程式正常執行,如果warn出現的過於頻繁或次數太多,那就代表你要檢查一下程式或環境或依賴程式是否真的出問題了。

假如你訪問乙個介面,設定了乙個超時,超時之後會拋異常,你在try塊裡不該打error也不該打info來無視它,這時你應該打warn,緊緊是警告一下,如果超時過多那就該檢查一下了,是不是對方介面有問題了或者是網路環境出問題了。

3.info和debug:

error和warn是指有問題,而info和debug就是指一般的資訊了。在程式出問題時,如果這條log可以幫助你分析問題或檢視程式的運**況,那就應該打個info。如果僅僅是為了在除錯階段檢視程式是否執行正確那就要打debug。前邊討論的介面引數錯誤問題,就應該打個info了,呼叫者說你的介面總是返回錯誤**,你可以告訴他,是他的哪個引數傳錯了。

有異常一定打日誌麼?

時間、類名及函式名,行號、執行緒號等等

關於開始的那些事

人總是有惰性的,當然我自己深有體會。一直有個想法想寫寫自己的blog,但隨時間的推移,很久都沒付出行動。最近工作專案開始不那麼忙了,維護乙份自己的blog的想法愈發強烈了。想把自己的一些想法,或者看到的一些有用的東西給大家分享,也給自己留下成長的痕跡。我從小喜歡看書,各種各樣的書屬於不求甚解的狀態。...

關於coredump的那些事

今天在網上搜了一些有關coredump的知識,簡單記一下,以防忘記 core dump檔名的模式儲存在 proc sys kernel core pattern中,預設是core 主要是今天比較鬱悶,要除錯程式crash,就用ulimit c unlimited設定了一下core檔案的大小,但是測試...

關於STL 的那些事

今晚參加訓練。樹狀陣列的練習,傻乎乎的用stl做了一晚,雖然題沒做出來,不過對stl的查詢有了更深一層的理解。關於stl。輸入輸出 vector push back pop back stack push pop queue push pop 頭 front 尾 back priority queu...