<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          程序員因重復(fù)記錄日志撐爆ELK被辭退!

          共 1493字,需瀏覽 3分鐘

           ·

          2020-12-10 00:50


          ? 點(diǎn)擊上方“JavaEdge”,關(guān)注公眾號

          設(shè)為“星標(biāo)”,好文章不錯(cuò)過!

          由于日志配置繁雜,很多同學(xué)喜歡直接cv其他項(xiàng)目或網(wǎng)上博客的配置文件,而不仔細(xì)研究每個(gè)配置項(xiàng)。最常見的就是重復(fù)記錄日志,這不但給查看和統(tǒng)計(jì)帶來不必要麻煩,還會(huì)增加磁盤和日志收集系統(tǒng)負(fù)擔(dān)。

          下面看幾個(gè)常見導(dǎo)致該錯(cuò)誤的案例,大家引以為戒,避免被辭退。

          1 logger配置繼承關(guān)系錯(cuò)誤


          定義方法記錄debug、info、warn、error四種日志:

          Logback配置

          配置看沒啥問題,但執(zhí)行方法后明顯記錄重復(fù)了:



          錯(cuò)因


          CONSOLE這個(gè)Appender同時(shí)掛載到倆Logger,定義的,由于定義的繼承自,所以同一日志既會(huì)通過logger記錄,也會(huì)發(fā)送到root記錄,因此應(yīng)用包下日志出現(xiàn)重復(fù)。

          如此配置的初衷是啥?


          本想實(shí)現(xiàn)自定義logger配置,讓應(yīng)用內(nèi)日志暫時(shí)開啟DEBUG級別。

          其實(shí),這無需重復(fù)掛載Appender,去掉下掛載的Appender即可

          <logger name="org.javaedge.logging" level="DEBUG"/>

          若自定義需把日志輸出到不同Appender,比如

          • 應(yīng)用日志輸出到文件app.log

          • 其他框架日志輸出到控制臺

          可設(shè)置additivity屬性為false,就不會(huì)繼承??Appender


          2 配置LevelFilter錯(cuò)誤


          記錄日志到控制臺時(shí),將日志按級別記錄到倆文件

          執(zhí)行結(jié)果

          • info.log 文件包含INFO、WARN和ERROR三級日志,不符預(yù)期

          • error.log包含WARN和ERROR倆級別日志,導(dǎo)致日志重復(fù)收集



          事故問責(zé)


          一些公司使用自動(dòng)化ELK方案收集日志,日志會(huì)同時(shí)輸出到控制臺和文件,開發(fā)人員在本地測試不會(huì)關(guān)心文件中記錄的日志,而在測試和生產(chǎn)環(huán)境又因?yàn)殚_發(fā)人員沒有服務(wù)器訪問權(quán)限,所以原始日志文件中的重復(fù)問題難以發(fā)現(xiàn)。

          到底為何重復(fù)?

          ThresholdFilter源碼解析


          • 當(dāng)日志級別 ≥ 配置級別?返回NEUTRAL,繼續(xù)調(diào)用過濾器鏈上的下個(gè)過濾器

          • 否則返回DENY,直接拒絕記錄日志

          該案例我們將?ThresholdFilter?置?WARN,因此可記錄WARNERROR級日志。

          LevelFilter


          用于比較日志級別,然后進(jìn)行相應(yīng)處理。

          • 若匹配就調(diào)用onMatch定義的處理方式:默認(rèn)交給下一個(gè)過濾器處理(AbstractMatcherFilter基類中定義的默認(rèn)值)

          • 否則調(diào)用onMismatch定義的處理方式:默認(rèn)也是交給下一個(gè)過濾器


          ThresholdFilter不同,LevelFilter僅配置level無法真正起作用。

          由于未配置onMatch和onMismatch屬性,所以該過濾器失效,導(dǎo)致INFO以上級別日志都記錄了。



          修正


          配置LevelFilter的onMatch屬性為ACCEPT,表示接收INFO級別的日志;配置onMismatch屬性為DENY,表示除了INFO級別都不記錄:

          如此,_info.log文件只會(huì)有INFO級日志,不會(huì)再出現(xiàn)日志重復(fù)。






          往期推薦


          大廠如何解決數(shù)值精度/舍入/溢出問題

          大廠數(shù)據(jù)庫事務(wù)實(shí)踐-事務(wù)生效就能保證正確回滾?

          線上問題事跡(一)數(shù)據(jù)庫事務(wù)居然都沒生效?

          硬核干貨:HTTP超時(shí)、重復(fù)請求必見坑點(diǎn)及解決方案

          給大忙人們看的Java NIO教程之Channel





          目前交流群已有?800+人,旨在促進(jìn)技術(shù)交流,可關(guān)注公眾號添加筆者微信邀請進(jìn)群


          喜歡文章,點(diǎn)個(gè)“在看、點(diǎn)贊、分享”素質(zhì)三連支持一下~

          瀏覽 46
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  中文有码一区二区三区 | 全国男人天堂网 | 久久国产欧美 | 色婷婷精品视频 | 亚洲v在线观看 |