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

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

          共 2175字,需瀏覽 5分鐘

           ·

          2021-05-29 10:55

          點(diǎn)擊藍(lán)色「小黑十一點(diǎn)半關(guān)注樓下小黑哥??

          Hello,大家好,我是樓下小黑哥~

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

          但是沒(méi)想到第一天就是九點(diǎn)半下班, 大意了~

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

          問(wèn)題背景

          事情是這樣的,我們的項(xiàng)目是一個(gè) 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>

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

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

          剛開(kāi)始還以為 Logback 配置文件寫(xiě)的有問(wèn)題,才導(dǎo)致這個(gè)問(wèn)題。網(wǎng)上找了幾個(gè)例子,對(duì)比了一下,這類(lèi)的配置文件并沒(méi)有什么問(wèn)題。

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

          問(wèn)題原因

          由于 Logback 的配置 debug=true,項(xiàng)目啟動(dòng)的時(shí)候,將會(huì)打印出 Logback  內(nèi)部日志信息,日志如下:

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

          那為什么項(xiàng)目啟動(dòng)之后,DEBUG 就失效了?

          不要急,接著往下看。

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

          由于這個(gè)項(xiàng)目是一個(gè) SpringBoot 的工程,里面有一個(gè)  LoggingApplicationListener將會(huì)監(jiān)聽(tīng) ApplicationEnvironmentPreparedEvent,代碼如下:

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

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

          上面這些日志級(jí)別配置來(lái)自其實(shí)來(lái)自 SpringBoot 的配置文件 application.properties

          總結(jié)

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

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

          問(wèn)題看起來(lái)是那么簡(jiǎn)單,排查的過(guò)程真的是令人頭禿。



          往期精彩回顧




          IDEA 這么設(shè)置 Maven,再也不用擔(dān)心依賴(lài)下載失敗了!
          這樣設(shè)置,讓你的 IDEA 好看到爆炸
          原來(lái) @Autowired 注解還可以這么玩?!
          瀏覽 93
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

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

          手機(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>
                  成人天天在线 | 青娱乐在线精品 | 熟女乱伦图片 | 人人妻人人操裸贷 | 激情性爱网站在线观看 |