日志級別與日志信息
題記:日志記錄,對一個應用非常重要,不僅僅只為定位線上bug(exception日志),還有業務日志,比如:統計用戶的搜索詞、響應時間等。
一、日志級別
眾所周知,在log4j中定義5個最常用日志級別:debug、info、warn、error、fatal,級別依次嚴重。
可大家思考過,什么時候應該記info,exception時是應該記warn,還是error呢 ?下面是今天小團隊討論后,自己的一些理解。
debug:程序內部的信息,對于外部使用的人是沒有意義。比如:函數的執行時間。(fine-grained information events that are most useful to debug an application)debug記錄的是細粒度的事件信息,對于調式程序是非常有用的。
info:informational messages that highlight the progress of the application at coarse-grained level.(強調應用的執行的進度,關鍵分支的記錄)。比如:關鍵分支記錄(輸入參數等),
對運維工程師來說這些信息也是有價值的,info指明程序的運行是否符合正確的業務邏輯。
對于warn與error級別,是我自己最困惑的 ?
先講個形象的例子 :
有一天,李三說請你幫個忙,幫他收拾一下自行車,但是他的自行車是放在他自己家里的,房屋上鎖。
1、李三:給你鑰匙,此時你沒有工具,但是你可以用你自家的工具修理自行車。結果:完成任務;過程:存在問題,內部可以處理此問題。
2、李三:沒給你鑰匙,但給你工具或者沒給你工具,此時你不能接觸到自行車。結果:無法完成任務;過程:存在問題,無法處理此問題。
結論:1情況,記warn;2情況,記error。觀點:關注的是最小單元的業務是否能夠完成,而對于應用來說,最小單元的業務就是“method方法”,每個方法去完成的任務都是一個獨立的、最小單元的業務。
提醒:必須結合具體場景來判斷,比如:dao從數據庫獲取數據失敗,對自身來說是error,沒有完成獲取數據的任務;但對業務層來說,或者有其它方法修復此異常,如通過http重新獲取等,此時業務層是完成自身任務的,所以為warn。
warn:potentially harmful situations.(潛在的有害狀態)。比如:廣告投放,淘寶搜索右側p4p廣告會根據地域展現,但某次用戶搜素,ip地址獲取失敗,可能會用默認值替代或者為空,但是并不影響右側廣告的展現。所以展現廣告的任務是完成的,對于業務來說是執行成功的,盡管過程中出現問題。
error:error events that might still allow the application to continue running.(錯誤事件發生,程序或許依然能夠運行)。比如:廣告前段展現,通過http從引擎獲取數據時,因為引擎的機器連接數達到上限或者臨時網絡原因,timeout,但程序能正常運行,next請求引擎則成功。從函數角度看,此函數任務沒有完成,記error。
fatal:very severe error events that will presumably lead the application to abort.(錯誤可能會導致應用崩潰)。
對于日志級別,或許大家也會有自己的理解(如有不同意見,請大家指點)
二、記錄信息
這個話題簡單一點,三點:
1、做什么操作
2、輸入內容
3、堆棧信息(有堆棧信息的情況下)
一、日志級別
眾所周知,在log4j中定義5個最常用日志級別:debug、info、warn、error、fatal,級別依次嚴重。
可大家思考過,什么時候應該記info,exception時是應該記warn,還是error呢 ?下面是今天小團隊討論后,自己的一些理解。
debug:程序內部的信息,對于外部使用的人是沒有意義。比如:函數的執行時間。(fine-grained information events that are most useful to debug an application)debug記錄的是細粒度的事件信息,對于調式程序是非常有用的。
info:informational messages that highlight the progress of the application at coarse-grained level.(強調應用的執行的進度,關鍵分支的記錄)。比如:關鍵分支記錄(輸入參數等),
對運維工程師來說這些信息也是有價值的,info指明程序的運行是否符合正確的業務邏輯。
對于warn與error級別,是我自己最困惑的 ?
先講個形象的例子 :
有一天,李三說請你幫個忙,幫他收拾一下自行車,但是他的自行車是放在他自己家里的,房屋上鎖。
1、李三:給你鑰匙,此時你沒有工具,但是你可以用你自家的工具修理自行車。結果:完成任務;過程:存在問題,內部可以處理此問題。
2、李三:沒給你鑰匙,但給你工具或者沒給你工具,此時你不能接觸到自行車。結果:無法完成任務;過程:存在問題,無法處理此問題。
結論:1情況,記warn;2情況,記error。觀點:關注的是最小單元的業務是否能夠完成,而對于應用來說,最小單元的業務就是“method方法”,每個方法去完成的任務都是一個獨立的、最小單元的業務。
提醒:必須結合具體場景來判斷,比如:dao從數據庫獲取數據失敗,對自身來說是error,沒有完成獲取數據的任務;但對業務層來說,或者有其它方法修復此異常,如通過http重新獲取等,此時業務層是完成自身任務的,所以為warn。
warn:potentially harmful situations.(潛在的有害狀態)。比如:廣告投放,淘寶搜索右側p4p廣告會根據地域展現,但某次用戶搜素,ip地址獲取失敗,可能會用默認值替代或者為空,但是并不影響右側廣告的展現。所以展現廣告的任務是完成的,對于業務來說是執行成功的,盡管過程中出現問題。
error:error events that might still allow the application to continue running.(錯誤事件發生,程序或許依然能夠運行)。比如:廣告前段展現,通過http從引擎獲取數據時,因為引擎的機器連接數達到上限或者臨時網絡原因,timeout,但程序能正常運行,next請求引擎則成功。從函數角度看,此函數任務沒有完成,記error。
fatal:very severe error events that will presumably lead the application to abort.(錯誤可能會導致應用崩潰)。
對于日志級別,或許大家也會有自己的理解(如有不同意見,請大家指點)
二、記錄信息
這個話題簡單一點,三點:
1、做什么操作
2、輸入內容
3、堆棧信息(有堆棧信息的情況下)
posted on 2010-10-09 23:26 石建 | Fat Mind 閱讀(1808) 評論(0) 編輯 收藏