大黃:誰提的代碼隐砸,怎么日志全是logger.info圃庭,異常也是?(一通找svn版本最終發(fā)現(xiàn)是小志)
大黃:小志歼冰,為啥程序中日志打印不分級(jí)別呢靡狞?
小志:我分了的,都用info
大黃:那什么是日志分級(jí)呢隔嫡?(無奈)
小志:……
01
什么是日志分級(jí)
現(xiàn)在的程序工程都比較龐大甸怕,為了開發(fā)調(diào)試和生產(chǎn)問題跟蹤排查甘穿,通常都會(huì)加入專業(yè)的日志框架,負(fù)責(zé)日志的打印梢杭。
Java工程常用的日志框架有l(wèi)og4j,log4j2,logback等温兼。在這些日志框架中會(huì)提供日志級(jí)別,以響應(yīng)不同的程序運(yùn)行事件武契,記錄日志募判。其中日志記錄器(Logger)是日志處理的核心組件。 org.apache.log4j.Level類提供以下級(jí)別咒唆,但也可以通過Level類的子類自定義級(jí)別
Level | 描述 |
---|---|
ALL | 各級(jí)包括自定義級(jí)別 |
DEBUG | 指定細(xì)粒度信息事件是最有用的應(yīng)用程序調(diào)試 |
ERROR | 錯(cuò)誤事件可能仍然允許應(yīng)用程序繼續(xù)運(yùn)行 |
FATAL | 指定非常嚴(yán)重的錯(cuò)誤事件届垫,這可能導(dǎo)致應(yīng)用程序中止 |
INFO | 指定能夠突出在粗粒度級(jí)別的應(yīng)用程序運(yùn)行情況的信息的消息 |
OFF | 這是最高等級(jí),為了關(guān)閉日志記錄 |
TRACE | 指定細(xì)粒度比DEBUG更低的信息事件 |
WARN | 指定具有潛在危害的情況 |
log4j具有5種正常級(jí)別(Level)全释。
日志記錄器(Logger)的可用級(jí)別Level (不包括自定義級(jí)別 Level)
static Level DEBUG
DEBUG Level指出細(xì)粒度信息事件對(duì)調(diào)試應(yīng)用程序是非常有幫助的装处。
static Level INFO
INFO level表明 消息在粗粒度級(jí)別上突出強(qiáng)調(diào)應(yīng)用程序的運(yùn)行過程。
static Level WARN
WARN level表明會(huì)出現(xiàn)潛在錯(cuò)誤的情形浸船。
static Level ERROR
ERROR level指出雖然發(fā)生錯(cuò)誤事件妄迁,但仍然不影響系統(tǒng)的繼續(xù)運(yùn)行。
static Level FATAL
FATAL level指出每個(gè)嚴(yán)重的錯(cuò)誤事件將會(huì)導(dǎo)致應(yīng)用程序的退出糟袁。
另外判族,還有兩個(gè)可用的特別的日志記錄級(jí)別:
static Level ALL
ALL Level是最低等級(jí)的躺盛,用于打開所有日志記錄项戴。
static Level OFF
OFF Level是最高等級(jí)的,用于關(guān)閉所有日志記錄槽惫。
日志記錄器(Logger)的行為是分等級(jí)的周叮。
02
為什么要日志分級(jí)
- 可以區(qū)分不同場(chǎng)景下日志打印,如測(cè)試環(huán)境日志打印級(jí)別為all打印全量日志界斜,生產(chǎn)環(huán)境可以調(diào)整為info級(jí)別
- 可以根據(jù)日志級(jí)別過濾日志仿耽。問題排查可以直接搜索error級(jí)別日志。error方法可以打印錯(cuò)誤的堆棧信息各薇。
- 規(guī)范編程项贺,降低系統(tǒng)維護(hù)和溝通成本。正常情況下info級(jí)別的日志是提示信息峭判,如果錯(cuò)誤級(jí)別也打info級(jí)別开缎。很容易忽略問題,對(duì)團(tuán)隊(duì)其它成員造成誤解林螃,排查問題費(fèi)時(shí)費(fèi)力奕删。所以要規(guī)范編程。
03
怎么合理安排日志打印
- try-catch中要拋出error級(jí)別的疗认,信息要描述清楚完残。例:
logger.error("錯(cuò)誤",e)
- 關(guān)鍵函數(shù)入?yún)⒑徒Y(jié)果要打印info級(jí)別日志伏钠。例:轉(zhuǎn)賬函數(shù),要在轉(zhuǎn)賬之前和轉(zhuǎn)賬后的金額谨设,關(guān)鍵參數(shù)打印全部熟掂,方便跟蹤。
- 忌日志打印過多扎拣,日志打印本身也消耗資源打掘。無用的日志不要打印,不要重復(fù)打印與交易無關(guān)的日志信息鹏秋。
- 日志遵循寧多勿少尊蚁,方便定位生產(chǎn)問題。防止交易編程黑盒操作侣夷。所以該打的日志一定要打横朋。
- 生產(chǎn)環(huán)境debug日志會(huì)關(guān)掉,所以 關(guān)鍵信息不要用debug級(jí)別打印百拓。