日誌是一款應用的重要組成部分,他就像程序員的眼睛同樣,幫助程序員發現應用到底在作些什麼。日誌真的是很是有用,特別是你的應用在生產環境中除了問題,卻又不能在測試環境或者其餘環境復現的時候。程序員
儘管日誌很是基本,可是程序員必須有智慧地去記日誌。若是不這樣,你有可能不能獲取到你想要的信息,或者記的日誌太多致使磁盤空間都被消耗完了,同時,也會致使系統性能的降低。算法
var goBranch1 = true; if (goBranch1){ console.log("In branch 1"); ... } else { console.log("Not in branch 1"); ... }
因此調試的時候日誌都應該記些什麼呢?在這裏,咱們總結羅列了一些咱們認爲對你有用的東西多線程
記錄應用的信息。包括了應用的名字,版本號,編譯時間等等。這些信息保證了咱們在調試的時候是針對了正確的版本的應用函數
記錄配置信息。包括了當前運行是什麼模式(生產模式仍是開發模式等等)。這些信息會讓咱們對應用的配置有個全局的印象,併爲咱們的調試提供方向。性能
記錄路徑信息。讓應用嘗試去獲取外部的資源(包括文件,套接字等等),這些信息讓咱們去肯定這些資源是否真的能被訪問測試
記錄分支信息。當咱們在程序中使用了控制流,記錄這些信息讓咱們知道是哪一個分支出了問題。大數據
記錄異常,一些異常會以標準異常的形式打包好,而後配跑出。記錄這些原始的異常信息,他們一般會反映出問題的根本緣由編碼
記錄先後的數據信息。當咱們處理外部數據的時候(包括編碼解碼,加密解密啊什麼的),記錄輸入輸出的數據會幫助咱們肯定處理數據的算法是否正確加密
記錄線程信息。在使用了多線程技術的應用裏,記錄線程信息幫助咱們發現是哪一個線程出了問題.net
記錄狀態信息,當編寫一些狀態常常發生改變的應用(好比說ssl),每次狀態發生變化的時候都記錄一下狀態信息會幫助咱們瞭解如今程序出現問題的時候程序到底在哪裏(ps,其實這點我沒大看懂,望有緣人請教)
不要記錄敏感信息。像密碼啊,密鑰啊這些鬼,特別是在咱們幫一些別的公司寫程序的時候
不要替換信息,注意你正在記錄的信息,不要去試圖更改這些信息的狀態。由於這些狀態信息多是又某個程序中變量控制的,而這些變量的改變會引發程序運行結果的改變。
不要在循環中記錄太多。在咱們編寫循環的時候(像for, while),請儘量只記錄有必要的信息,由於若是在循環中記錄太多,磁盤空間很容易被撐爆
不要記錄重複的信息。有時候你會記錄一些即將被傳入某個方法的參數,而後你又忘記了,在函數內部把他又記錄了一次。請儘可能避免這種狀況發生,你可能須要定一個你本身的記錄日誌的準則
不要記錄模糊的信息。請記錄完整的信息,而不要讓程序員去猜的他的意思
不要記錄大的數據對象。若是你但願應用處理大數據對象(MB級這樣的),記錄前請當心的評估,也許你只須要記錄一部分數據對象就能夠了對吧
一個好的日誌會讓你天天的工做更加簡單。合適的日誌幫助你快速的定位和解決一些緊急的問題
原文出處譯者:Coordinate35