日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

业务知识——Logger日志打印规范

發(fā)布時(shí)間:2024/9/30 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 业务知识——Logger日志打印规范 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

初期,我們的系統(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í)別(部分未列出):

  • error?- 運(yùn)行期錯(cuò)誤日志記錄,應(yīng)該有專門的error日志文件。;
  • warn?- 警告信息,如程序調(diào)用了一個(gè)即將作廢的接口,接口的不當(dāng)使用,運(yùn)行狀態(tài)不是期望的但仍可繼續(xù)處理等;
  • info?- 有必要的事件信息記錄。
  • debug?- 調(diào)試信息,業(yè)務(wù)處理進(jìn)行狀態(tài),當(dāng)前的變量值等;
  • trace?- 一些更詳細(xì)的跟蹤信息;
  • 鑒于我們是一個(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)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。