业务知识——Logger日志打印规范
初期,我們的系統(tǒng)比較簡(jiǎn)單,在這個(gè)過(guò)程中,加上大家平時(shí)都不注意,所以Logger日志一直是打印的隨心所欲,什么是隨心所欲的,就是大家想在哪里打日志就在哪里打印日志,想輸出什么就輸出什么,毫無(wú)規(guī)范可言,在系統(tǒng)的流量和業(yè)務(wù)量變得越來(lái)越復(fù)雜的情況下,良好的日志才能幫助我們更快地找到問(wèn)題,更好地解決問(wèn)題。
?
首先來(lái)看一下比較常用的Logger日志級(jí)別(部分未列出):
鑒于我們是一個(gè)金融系統(tǒng),流量還是不算很大,我個(gè)人認(rèn)為debug級(jí)別和info級(jí)別可以統(tǒng)一歸為info級(jí)別下打印,這是考慮到現(xiàn)在系統(tǒng)穩(wěn)定性不夠,處于一個(gè)快速迭代開(kāi)發(fā)的過(guò)程中,線上問(wèn)題可能隨時(shí)都有,所以將業(yè)務(wù)流轉(zhuǎn)與部分變量值打印出來(lái)還是很有必要的。error記錄錯(cuò)誤日志,但如果錯(cuò)誤是預(yù)期會(huì)發(fā)生的,并且已經(jīng)有了其他的處理流程,則建議使用warn級(jí)別。例如在try-catch中catch塊里處理后繼續(xù)流程的日志記錄。
1.Logger對(duì)象的定義:
<strong>private static final Logger logger = LoggerFactory.getLogger(Test.class);</strong>2.日志中不出現(xiàn)計(jì)算或方法調(diào)用,防止在打印日志的時(shí)候報(bào)錯(cuò)。
之前在上家公司的時(shí)候就確實(shí)出現(xiàn)過(guò)因打印日志而系統(tǒng)RunTimeException的,不應(yīng)該出現(xiàn)。
3.try-catch如果往外拋出,則不應(yīng)該打印異常信息。
try {throw new Exception(); } catch (Exception e) {logger.error("xxxxxx", e);throw e; }這樣的處理解釋不合適的,因?yàn)閽伋鋈サ漠惓?#xff0c;一般情況下你肯定會(huì)記錄。(當(dāng)然如果你不記錄,那么我就搞不懂為什么你要拋出去了)。
4.如何打印error Log
log.error("xxxxxxxxxxxx", e);這種比較推薦,當(dāng)然在實(shí)際過(guò)程中我也看到有同事用了其他的方式,形如:
logger.error("xxxxxx", e.getStackTrace());可以是可以,這種打印出來(lái)的stackTrace比較丑。。。用一下你就知道。
Log4j、Log4j2的源碼中對(duì)于異常Exception的處理時(shí)這樣的。
所以【占位符小于實(shí)際的參數(shù)數(shù)量時(shí)會(huì)把最后一個(gè)設(shè)置為Throwable】,即可以正常打印error。
log.error("xxxxxxxxxxxx{}","第一個(gè)參數(shù)" e); //可以正常打印 log.error("xxxxxxxxxxxx{},{}","第一個(gè)參數(shù)" e); //不能正常打印,因?yàn)檎嘉环蛥?shù)數(shù)量一樣?
private void initThrowable(final Object[] params, final int argCount, final int usedParams) {if (usedParams < argCount && params[argCount - 1] instanceof Throwable) {this.throwable = (Throwable) params[argCount - 1];} else {this.throwable = null;}}5.日志記錄建議用英文(這點(diǎn)沒(méi)有依據(jù))。
用中文除了占用大點(diǎn)好像沒(méi)什么不好,但是還是建議用字母。
6.http請(qǐng)求時(shí)應(yīng)該打印 url ,param, get/post,statusCode,ret,timeUsed等關(guān)鍵字段。
反正我吃過(guò)沒(méi)打印這些的虧,還不是我寫(xiě)的代碼。說(shuō)出來(lái)都是淚。
7.相對(duì)6,別人調(diào)用接口的時(shí)候應(yīng)打印 入?yún)?#xff0c;請(qǐng)求用時(shí),返回值,來(lái)源等關(guān)鍵字段。
8.分支流程如果必要再外層打印參數(shù),可以知道具體走了哪個(gè)流程。
?
以上都是日常工作的痛點(diǎn),希望自己可以在今后工作中也以此為標(biāo)準(zhǔn)。
總結(jié)
以上是生活随笔為你收集整理的业务知识——Logger日志打印规范的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Java基础知识——异常Throwabl
- 下一篇: IDE使用经验——阿里代码规范 Ec