前段時間,公司的乙個專案,需要做很多的資料介面和同步程式,於是就遇到了日誌記錄的問題,何時記錄,如何記錄,哪些要記哪些不用記等問題。針對日誌記錄的問題,經過一系列討論,終於達成了統一的處理辦法。解決了各個模組系統,不同的開發人員,日誌記錄不統一,隨意的問題。今天終於抽出時間把這個問題總結並結合網路上的資料,進行整理。
為什麼要記錄日誌
記錄日誌是除錯程式,監視程式執行的一種重要的方式,主要有兩個目的:bug的及時發現和定位,顯示程式執行狀態。正確詳細的日誌記錄能夠快速的定位問題。同樣,通過檢視日誌,可以看出程式正在做什麼,是不是按預期的設計在執行,所以記錄下程式的執行狀態是必要的。
哪些地方需要記日誌
1. 呼叫或封裝外部程式或介面
程式中對外部系統與模組的依賴呼叫前後都應該記下日誌,方便介面除錯。出問題時也可以很快查出是**出的問題
log.debug("calling external system:" + parameters);
object result = null;
try catch (exception e)
2.對重要物件或變數被修改,要以info記錄修改前的資訊和修改後的狀態。
程式中重要的狀態資訊的變化應該記錄下來,方便查問題時還原現場,推斷程式執行過程
boolean isrunning;
isrunning = true;
log.info("system is running");
//...
isrunning = false;
log.info("system was interrupted by " + thread.currentthread().getname());
3.系統入口與出口:
系統的入口和出口,重要方法或模組的執行。記錄它的輸入與輸出,方便定位。
4.業務異常或者重要的業務處理:
任何業務異常都應該記下來,還有系統中一些重要的業務,比如結算等業務,也最好能記錄下來。
5.非預期執行:
為程式在「有可能」執行到的地方列印日誌。如果我想刪除乙個檔案,結果返回成功。但事實上,那個檔案在你想刪除之前就不存在了。最終結果是一致的,但程式得讓我們知道這種情況,要查清為什麼檔案在刪除之前就已經不存在
int myvalue = ***x;
int absresult = math.abs(myvalue);
if (absresult < 0)
6.很少出現的else情況:
**中,一定要有完整的if else,如果else 裡面沒有要執行的,記錄日誌,這樣避免else吞掉你的請求,或是返回給你難以理解的結果。
object result = null;
if (running) else
7. 批量資料的執行進度:
log.debug("current progress: " + (currentpos * 100 / totalamount) + "%");
日誌記錄的方式
1. 日誌資訊應該包含記錄程式執行時間和錯誤發生的時間.
2. 日誌資訊清晰準確有意義
日誌應該是清晰準確的: 當看到日誌的時,就能準確的知道錯誤是因為連線池取不到連線導致的問題。
connection connection = connectionfactory.getconnection();
if (connection == null)
3. 記錄錯誤的位置
**中,一定要記錄下錯誤所在的檔名和函式名(必須能區分開過載函式),有行數最好。
4. 區分日誌級別
在程式中log進行分級是很重要的,通常可以分為6 級:trace5. 資訊詳細準確
一定要記錄下完整準確的資訊,否則還不如記錄,因為錯誤的資訊可能會誤導開發人員。所以最簡單的辦法就是記錄完整的stack trace.
6. 最好能給log帶上上下文
沒有相應的上下文的log,不過是噪音,它們不會對除錯過程中有意義的數值或是空間起作用。
transaction failed 這樣的log資訊比沒有記錄更讓人抓狂。
關於記錄日誌的思考
在開發的過程中,我們會記錄日誌。這樣可以方便關於觀察程式的執 況,和問題的所在。在看日誌就可以知道,當前的程式是在執行什麼操作,操作的結果是什麼?個人認為這樣的日誌才是有效的日誌。記錄執行的方法名或者類名等 記錄方法名或者類名,這樣我們可以準確的定位到當前執行的是什麼服務。記錄服務的輸入與輸出 輸入...
關於日誌的資訊記錄
private integer id id名稱 private string visittime 訪問的時間 訪問的時間會在插入資料庫的時候進行新增 private string executetime 執行方法的時間 private string url 訪問的路徑 private string ...
關於日誌記錄的經驗分享
今天主要寫的是記日誌的一些經驗,我們在正式的生產環境中總是會通過在程式中寫日誌來記錄異常或者生產環境的配置或者記錄一些程式的操作。日誌很多的時候主要分成記錄異常日誌和記錄非異常的日誌。非異常日誌的種類也很多,更多的時候我很是用來記錄程式執行的狀態的,比如環境的配置,版本,操作的使用者還有就是執行的資...