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

          一個令人頭禿的問題,Logback 日志級別設(shè)置竟然無效?

          共 2319字,需瀏覽 5分鐘

           ·

          2021-05-28 18:30

          來源 | 樓下小黑哥(ID:US_stocks


          最近被公司派去北京出差,本以為是個輕松的差事,北京一周游~

          但是沒想到第一天就是九點半下班, 大意了~

          好了,回到正題,今天來講下最近調(diào)試項目的時候發(fā)現(xiàn)的一個 Logback 日志級別設(shè)置不生效的問題。

          問題背景

          事情是這樣的,我們的項目是一個 SpringBoot 的工程的,其中日志框架使用的是 LogBack,配置文件如下所示:

          <configuration scan="true" scanPeriod=" 5 seconds" debug="true">

              <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
                  <encoder>
                      <pattern>%date [%thread] %-5level %logger{80} - %msg%n</pattern>
                  </encoder>
              </appender>

              <logger name="org.springframework" level="DEBUG"/>

              <root level="debug">
                  <appender-ref ref="stdout"/>
              </root>

          </configuration>

          為了方便查看項目執(zhí)行的 SQL,這里我把日志的級別調(diào)整成 DEBUG

          運(yùn)行的項目,執(zhí)行結(jié)果比較令人驚訝,日志僅僅輸出了 INFO 日志,并沒有輸出 DEBUG 日志。

          剛開始還以為 Logback 配置文件寫的有問題,才導(dǎo)致這個問題。網(wǎng)上找了幾個例子,對比了一下,這類的配置文件并沒有什么問題。

          于是進(jìn)行一系列深度排查(令人頭禿),最終終于找到了問題的原因。

          問題原因

          由于 Logback 的配置 debug=true,項目啟動的時候,將會打印出 Logback  內(nèi)部日志信息,日志如下:

          從這個日志可以看到,Logback Root 已經(jīng)設(shè)置為 DEBUG。

          那為什么項目啟動之后,DEBUG 就失效了?

          不要急,接著往下看。

          當(dāng) Spring 容器啟動之后,Spring 內(nèi)部將會發(fā)出一些列的 ApplicationEvent,然后這些將會被各類已經(jīng)注冊的  ApplicationListener監(jiān)聽。

          由于這個項目是一個 SpringBoot 的工程,里面有一個  LoggingApplicationListener將會監(jiān)聽 ApplicationEnvironmentPreparedEvent,代碼如下:

          這里面的邏輯比較簡單,獲取系統(tǒng)配置的日志級別,levels 值如下:

          可以看到這里 root 對應(yīng)的值為 info,這里將會繼續(xù)調(diào)用 Logback 的的方法設(shè)置日志級別,日志輸出如下:

          上面這些日志級別配置來自其實來自 SpringBoot 的配置文件 application.properties

          總結(jié)

          最后,總結(jié)一下,SpringBoot 項目,如果使用單獨的 LogBack 配置文件,SpringBoot 的配置文件 application.properties 配置的 logging.level.root 將會覆蓋的 Logback 配置文件中的 root 的配置:

          <root level="debug">
              <appender-ref ref="stdout"/>
          </root>

          問題看起來是那么簡單,排查的過程真的是令人頭禿。

          1、Intellij IDEA這樣 配置注釋模板,讓你瞬間高出一個逼格!
          2、吊炸天的 Docker 圖形化工具 Portainer,必須推薦給你!
          3、最牛逼的 Java 日志框架,性能無敵,橫掃所有對手!
          4、把Redis當(dāng)作隊列來用,真的合適嗎?
          5、驚呆了,Spring Boot居然這么耗內(nèi)存!你知道嗎?
          6、全網(wǎng)最全 Java 日志框架適配方案!還有誰不會?
          7、Spring中毒太深,離開Spring我居然連最基本的接口都不會寫了

          點分享

          點收藏

          點點贊

          點在看

          瀏覽 31
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

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

          手機(jī)掃一掃分享

          分享
          舉報
          <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>
                  玖玖成人网站 | 最新日韩免费在线 | 肏屄中国一级黄色 | 【乱子伦】国产精品www | 激情五月,五月婷婷 |