<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>

          線上排障技巧 | 動態(tài)修改LOGGER級別

          共 2271字,需瀏覽 5分鐘

           ·

          2020-11-20 16:53

          前言

          大多數(shù)情況下,我們會在打印日志時定義日志的LOGGER級別,用來控制輸出的信息范圍。

          一方面,過多的輸出會影響查看日志的效率,另一方面,過少的日志讓問題定位變得困難。

          但當(dāng)線上出現(xiàn)問題時,線上容器通常定義在info級別,發(fā)生一些疑難問題時,光靠info級別的日志很難定位問題。

          一個典型的場景:在一些需要打印MySQL語句的場景,如果你正在使用MyBatis框架,由于MyBaits中SQL語句是DEBUG級別的信息,通常在線上容器就沒法看到。

          一個丑陋的解決辦法就是在沙箱/預(yù)發(fā)環(huán)境,將log4j.xml中的info改為debug:

          "info">
          ????"detail"/>
          ????"error"?ref="error"/>

          然后重新打包部署,再發(fā)起請求來調(diào)試代碼。

          甚至在一些無法模擬請求的場景下,還需要將修改灰度至線上環(huán)境,大量的debug信息會對線上服務(wù)造成實質(zhì)性的影響。

          「本文簡要介紹如何使用阿里巴巴開源Java調(diào)試工具Arthas,實時修改線上服務(wù)的LOGGER級別,從而免去打包再部署的繁雜手續(xù),更快的定位線上問題?!?/strong>

          「效果演示:」

          「本文內(nèi)容重點:」

          • Arthas工具簡介
          • 本地測試:實時修改LOGGER級別
          • 線上實戰(zhàn):實時打印MyBatis SQL語句
          • 總結(jié)

          Arthas工具簡介

          Arthas是阿里開源的Java診斷工具,它的功能可以大致參考下圖:

          它運行的原理是通過字節(jié)碼生成工具(ASM字節(jié)碼增強),將代理邏輯編織到原來的類里,實現(xiàn)對應(yīng)的監(jiān)控調(diào)試等功能。

          本地測試:實時修改LOGGER級別

          安裝arthas

          網(wǎng)絡(luò)安裝

          在接通外網(wǎng)的環(huán)境下,可以使用快速網(wǎng)絡(luò)安裝,會從阿里的源拉去全量包。

          curl?-O?https://arthas.aliyun.com/arthas-boot.jar
          java?-jar?arthas-boot.jar

          全量安裝

          如果本地外網(wǎng)環(huán)境不通,比如某些容器內(nèi)是不允許外網(wǎng)訪問的,那么可以使用預(yù)先下載好的全量安裝包,然后解壓后運行包內(nèi)的jar,使用命令:

          java?-jar?arthas-boot.jar

          啟動arthas

          我在本地啟動arthas,效果如下圖:

          全局Logger信息

          使用命令:

          logger

          可以看到所有l(wèi)ogger的信息,包括其中每個appenders。

          使用如下命令,修改名稱為ROOT的logger的日志級別至debug級別:

          logger?--name?ROOT?--level?debug

          可以看到多出了debug級別的輸出。

          指定類名的logger信息

          在有多個logger的情況下,可以查找指定名稱的logger

          logger?-n?ROOT

          指定classloader的logger信息

          如果需要改變指定類的輸出級別,先要定位到該類的classLoader,然后修改該clasLoader的logger。

          使用sc命令查看你需要改變的類信息:

          sc?-d?cn.monitor4all.miaoshaweb.DynamicLoggerTest?|?grep?classLoaderHash

          隨后可以通過classLoader找到其對應(yīng)的logger:

          logger?-c?18b4aac2

          然后就可以調(diào)整對應(yīng)的logger日志級別:

          logger?-c?18b4aac2?--name?ROOT?--level?debug

          使用 ongl 命令

          此外,Arthas還支持使用ognl來修改日志級別。但是這種方法對log4j不友好,修改會報錯。并且就算支持的logback/slf4j,也需要復(fù)雜的形如ognl -c @org.slf4j.LoggerFactory@getLogger("root").setLevel()的命令才能修改,并不是一個很好的辦法。

          線上實戰(zhàn):實時打印MyBatis SQL語句

          容器內(nèi)啟動arthas

          我的線上容器,是沒有外網(wǎng)訪問權(quán)限的(這種情況蠻常見的),我將全量包解壓在容器內(nèi)運行:

          打印DEBUG級別的SQL日志

          下圖是沒有DEBUG信息的一條請求日志,可以看到只有入?yún)⒊鰠⒌臄r截器信息(INFO級別):

          使用logger --name ROOT --level debug,將SQL語句輸出出來:

          畢竟,很多時候線上的bug是不小心拼錯SQL導(dǎo)致。

          總結(jié)

          文章簡單總結(jié)了使用Arthas來動態(tài)調(diào)整日志級別的使用方法。在線上環(huán)境,能夠有效的提升排查問題的效率。當(dāng)然Arthas能做的還遠(yuǎn)不止于此,更多有趣并且「實用」的功能等待大家的發(fā)掘。

          參考

          https://jueee.github.io/2020/08/2020-08-20-Arthas%E4%B9%8B%E6%9F%A5%E7%9C%8B%E5%92%8C%E4%BF%AE%E6%94%B9%E6%97%A5%E5%BF%97%E7%BA%A7%E5%88%AB/
          https://arthas.aliyun.com/doc/logger.html#appenderlogger
          https://juejin.im/post/6844903959195303943


          推薦閱讀:


          喜歡我可以給我設(shè)為星標(biāo)哦

          好文章,我“在看”
          瀏覽 37
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  免费观看在线Aⅴ播放 | 影音先锋夜夜亚洲 | 荫蒂添出高潮A片视频 | 久久久久无码国产精品不卡 | 啊91av在线 |