日誌記錄的作用和方法

2021-09-01 13:49:06 字數 2699 閱讀 2837

程式中記錄日誌一般有兩個目的:troubleshooting和顯示程式執行狀態。好的日誌記錄方式可以提供我們足夠多定位問題的依據。日誌記錄大家都會認為簡單,但如何通過日誌可以高效定位問題並不是簡單的事情。這裡列舉下面三個方面的內容,輔以**示例,總結如何寫好日誌,希望對他人有所啟發和幫助:

相關廠商內容

springone首次空降中國·北京spring&cloudfoundry,12月7~8日,限額免費報名中

qcon北京2013(4月25日~27日),18項精彩專題,現已啟動,詳情

qcon北京2013(4月25日~27日),海外著名講師確認,現已六折報名中

創業者之翼為創業新星免費提供甲級辦公場所,詳情

天地行講師龔書專訪——基於as3顯示列表的2d遊戲渲染優化

相關贊助商

怎樣記日誌可以方便troubleshooting

程式執行狀態可以記哪些

應該避免怎樣的日誌方式

怎樣記日誌可以方便troubleshooting?

1. 對外部的呼叫封裝

程式中對外部系統與模組的依賴呼叫前後都記下日誌,方便介面除錯。出問題時也可以很快理清是哪塊的問題

1. log.debug("calling external system:" + parameters);

2. object result = null;

3. try catch (exception e)

2.狀態變化

程式中重要的狀態資訊的變化應該記錄下來,方便查問題時還原現場,推斷程式執行過程

1. boolean isrunning;

2. 3. isrunning = true;

4. log.info("system is running");

5. 6. //...

7. 8. isrunning = false;

9. log.info("system was interrupted by " + thread.currentthread().getname());

3.系統入口與出口:

這個粒度可以是重要方法級或模組級。記錄它的輸入與輸出,方便定位

1. void execute(object input)

4.業務異常:

任何業務異常都應該記下來:

1. try catch (ioexception e) catch (busines***ception e) catch (exception e)

10.

5.非預期執行:

為程式在「有可能」執行到的地方列印日誌。如果我想刪除乙個檔案,結果返回成功。但事實上,那個檔案在你想刪除之前就不存在了。最終結果是一致的,但程式得讓我們知道這種情況,要查清為什麼檔案在刪除之前就已經不存在

1. int myvalue = ***x;

2. int absresult = math.abs(myvalue);

3. if (absresult < 0)

6.很少出現的else情況:

else可能吞掉你的請求,或是賦予難以理解的最終結果

1. object result = null;

2. if (running) else

程式執行狀態可以記哪些?

程式在執行時就像乙個機械人,我們可以從它的日誌看出它正在做什麼,是不是按預期的設計在做,所以這些正常的執行狀態是要有的。

1. long starttime = system.currenttime();

2. 3. // business logical

4. 5. log.info("execution cost : " + (system.currenttime() - starttime) + "ms"); 

2. 大批量資料的執行進度:

1. log.debug("current progress: " + (currentpos * 100 / totalamount) + "%");

3.關鍵變數及正在做哪些重要的事情:

執行關鍵的邏輯,做io操作等等

1. string getjvmpid()

7. 8. void invokeremotemethod(object params)

應該避免怎樣的日誌方式?

1. 混淆資訊的log

日誌應該是清晰準確的: 當看到日誌的時候,你知道是因為連線池取不到連線導致的問題麼?

1. connection connection = connectionfactory.getconnection();

2. if (connection == null)

2. 記錯位置

產品**中,使用console記錄日誌,導致沒有找到日誌。

1. } catch (configurationexception e)

3. 記錯級別

記錯級別常常發生,常見的如:混淆**錯誤和使用者錯誤,如登入系統中,如果惡意登入,那系統內部會出現太多warn,從而讓管理員誤以為是**錯誤。可以反饋使用者以錯誤,但是不要記錄使用者錯誤的行為,除非想達到控制的目的。

1. log.warn("failed to login by "+username+");

4. 遺漏資訊

1. } catch (exception ex)

總結:日誌記錄在程式設計師日常程式設計實踐中必須面對的事情,本文針對這個話題談了下自己的體會,希望讀者能有所收益。多有不足,請多包涵。

程式那些事 日誌記錄的作用和方法

程式中記錄日誌一般有兩個目的 troubleshooting和顯示程式執行狀態。好的日誌記錄方式可以提供我們足夠多定位問題的依據。日誌記錄大家都會認為簡單,但如何通過日誌可以高效定位問題並不是簡單的事情。這裡列舉下面三個方面的內容,輔以 示例,總結如何寫好日誌,希望對他人有所啟發和幫助 1.對外部的...

python的日誌記錄方法

python的日誌記錄方法較多,這裡我只簡單的介紹一下logging模組記錄日誌的方法,其他方法請自行查詢。logging模組支援5種等級的日誌記錄,包括debug information warning error和critical。下面我們利用例項簡單的了解一下這幾個等級的日誌記錄。首先在我們的...

Python記錄日誌的方法

日誌不管對於開發或者運維都是一項非常重要的東西,它可以用來排錯,解決故障,統計分析等。本文介紹python中的日誌庫的用法。匯入日誌庫 import logging 日誌庫的主要有以下方法 獲取日誌名,比如 logging.getlogger name 定義handler,比如 logging.fi...