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

2021-06-21 14:49:00 字數 2515 閱讀 5920

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

1. 對外部的呼叫封裝

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

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

2. object result = null;

3. try catch (exception e)

2.狀態變化

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

3.系統入口與出口:
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());

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

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)使用者自己少寫了資訊,導致毫無參考價值;(2)使用者呼叫log的方式導致丟失資訊,如下例,沒有stack trace.

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

日誌記錄的作用和方法

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

關於日誌的那些事

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

詳解python程式中記錄日誌的方法

日誌可以用來記錄應用程式的狀態 錯誤和資訊訊息,也經常作為除錯程式的工具。它的重要性就不多說了,直接進入正題。python提供了乙個標準的日誌介面,就是logging模組。日誌級別有debug info warning error critical五種。首先來看logging簡單的使用方法。這一看到...