程式中記錄日誌一般有兩個目的: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...