日志的5个级别
本文最初發布于aib42個人網站,經原作者授權由InfoQ中文站翻譯并分享。
\\日志記錄是軟件開發的一個概念,幾乎所有(可能并不是所有)軟件都能從日志記錄中獲得很多好處。在開始一個大項目時,日志記錄通常是我第一個要搭建的子系統。關于它的好處,我可以說出一大堆,但我想把這個機會留給其他人(或者哪一天我想說了再說)。現在,我想說一說日志級別。
\\日志級別是對基本的“滾動文本”式日志記錄的一個重要補充。每條日志消息都會基于其重要性或嚴重程度分配到一個日志級別。例如,“你的電腦著火了”是一個非常重要的消息,而“無法找到配置文件”的重要等級可能就低一些。
\\很多應用程序和庫會根據自己或用戶的需求定義自己的日志級別(參考文末的“外部例子”了解這方面的內容)。當然,并沒有一種約定俗成的方法來做這件事,想怎么做都是可以的,但我想要說說我認為的最重要的五個(或者六個,或者四個)日志級別,它們應該是你自定義日志級別的基礎。
\\我還將討論給這些級別分配的顏色(或者說風格),因為帶有不同顏色(或風格)的日志更容易追蹤。如果采用了這樣的系統,就可以很容易檢查你的程序狀態,就算沒有受過訓練的人也可以輕易分辨。誰知道呢,你可能留下電腦跑去吃午飯了,如果出現問題只能找別人來查看日志。
\\Error
\\錯誤已經發生了,這是毫無疑問的。錯誤的來源可能是在外部,但不管怎樣都需要看一下是怎么回事。
\\可以用這個級別來表示需要引起人們注意(大多數時候需要采取行動)的錯誤。大多數難以優雅處理的異常都屬于Error范疇。
\\風格:能引起人們注意的東西。我使用紅色文本來表示(我的終端背景是黑色的)。
\\例子:
\\- 無法找到\"crucial.dat\"文件\\t
- 錯誤的處理數據:\u0026lt;Exception\u0026gt;[堆棧追蹤或后續的調試消息]\\t
- \u0026lt;Exception\u0026gt;在連接數據庫時\
Warn
\\錯誤有可能已經發生了。我只是一條日志消息,無法分析到底發生了什么,或許需要其他人來看看是不是有問題。
\\這可能是一個平行空間里的錯誤。它可能是當前或未來潛在問題(比如響應速度慢、連接斷開、內存吃緊等等)的預兆,也可能是程序在處理某些任務時出現錯誤(但可能不一會再發生類似的情況)。
\\風格:能引起人們注意但又不會讓人感到厭煩的風格,以免你在解決其他問題時沒空來處理這些錯誤。與Error的風格不同,我使用黃色的文本來表示Warn。
\\例子:
\\- 連接關閉,在2秒后重新連接\\t
- 無法找到\"logging.conf\"[在配置文件中指定的],回到默認配置\\t
- 30秒后嘗試連接超時\\t
- 出現FileVersionTooOldException異常,回到Version12Parser\
Info
\\通知用戶一個操作或狀態發生了變化。別緊張,繼續手頭的活。
\\Info可以說是(一般的非技術)用戶可以接觸到的最“啰嗦”的日志級別。如果有人把它們大聲念給你聽,你也不會介意,這是你最樂于見到的日志記錄。它不會包含很多技術細節,可能只包含普通用戶會關注的信息(比如文件名等)。
\\風格:可以和背景顏色區分開來,我使用白色文本。
\\例子:
\\- 代理初始化完畢\\t
- 加載存檔\"yeti02\"\\t
- 進入高速模式\\t
- 當前目錄是\"/tmp\"\\t
- 上行線路已建立\\t
- 渲染完成,耗時42.999秒\
Debug
\\如果你能讀懂這個級別的日志,那么你離程序已經很近了。
\\這就是為什么你需要保存日志文件,在修復bug時需要這些日志。這是開發人員最關心的內容。
\\在轉儲程序運行流程和其他技術問題時,應該使用Debug級別的日志。除非日志太多了(在這種情況下使用Trace級別更合適)或者更適合使用更高級別的日志,否則Debug日志是非常值得保留的,畢竟是你自己在代碼中記錄這些日志的。如果和其他的Debug或更高級別的消息重疊,而且沒有包含更多的信息,那么可以考慮將其刪除。
\\風格:可以很容易就忽略的風格。我使用淺灰色或米黃色文本,也就是我的終端的默認文本顏色。
\\例子:
\\- 從\"/etc/octarine/octarine.conf\"讀取配置\\t
- 使用\"/home/aib/.octarinerc\"覆蓋配置\\t
- 分析完成,創建圖…\\t
- 作為”user”連接到服務器:4242\\t
- 發送兩條消息\\t
- 渲染時故障:\\t
- Foo 0.990秒\\t
- Bar 42.009秒\
Trace
\\這些技術細節可能與程序不是很相干,除非你正好需要它們。
\\Trace的信息是更加具體的調試信息,你可能并不想看到它(除非你向保存日志的人賣硬盤的時候需要)。它會包含比如說調用了什么函數(函數名),或是和客戶端交換了什么網絡包等內容。它善于找到一些低級錯誤,但通常你可以在調試消息中縮小范圍,找到問題。
\\大多數Trace消息包含了你已經知道的信息(Debug消息中說了是“登錄”,所以這肯定是登錄相關的數據包),所以可能對你不是很有用,除非你的假設是錯誤的。(”它會不會是登出消息?!“、”這里應該調用foo。為什么foo的Trace信息沒有打印出來呢?”)
\\風格:使用比Debug消息更加不顯眼的風格。我使用深灰色,通常用來表示禁用的顏色。
\\例子:
\\- 調用參數(\"baz\
總結
- 上一篇: ORACLE安装报错解决
- 下一篇: 工业互联网不只是网络:网络是基础,平台是