tomcat啟動logback日志報錯ERROR in ch.qos.logback.classic.PatternLayout("null") - Empty or null pattern


事件背景:

        公司的線上javaweb項目出了個在高並發請求下自動掛掉的bug,日志是斷開的不顯示任何的異常,找了好久沒找到原因,一點點的分析問題,先把日志打印好,啟動的時候logback自帶日志就報錯了,以前沒怎么關注,因為感覺影響不大,現在看來還是需要排除一切可能的因素,把這些小問題解決下。

 

 

解決思路:

      首先肯定是查找關鍵字在百度上搜一下看有沒有什么解決方案,查找了一圈都沒有信息。谷歌了一把,在stack overflow上找到這樣一個信息

The default encoder is PatternLayoutEncoder which is a subclass of PatternLayoutEncoderBase. PatternLayoutEncoderBase only supports setting a log pattern such as:

  <encoder>
        <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
  </encoder>

You can use LayoutWrappingEncoder instead

  <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
        <layout class="com.dces.util.LoggingConsoleLayout" />
  </encoder>

      原文地址:https://stackoverflow.com/questions/14168684/creating-a-custom-layout-in-logback

      大概意思是讓我們用encoder標簽吧,簡單就是這么理解的,我們的logback的配置文件里面的配置一直都是layout標簽的,這個encoder編碼標簽是個什么意思。再百度一下

 <!--encoder:將事件轉換為字符串
            默認配置為PatternLayoutEncoder類 
            encoder用於替代Layout,encoder擴展了Layout功能
            Layout功能:只負責把事件轉換為字符串,但是不能指定何時將記錄寫入到指定目的地
            encoder功能:即負責把事件轉換為字符串,也可以指定何時將記錄寫入到指定目的地  --> 

       原文logback配置模板詳解:https://www.cnblogs.com/z-x-p/p/11686963.html 

       直接把layout替換成encoder,先用默認的class,什么都不帶試一下

<!--<layout class="ch.qos.logback.classic.PatternLayout">-->
        <encoder>
            <pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread] %logger{32}.%method:%L - %msg%n</pattern>
        </encoder>
        <!--</layout>-->

        沒有報什么其他的錯,但是PatternLayout("null") - Empty or null pattern這個還存在!!很無語,極度無語!后來根據下面提示的、說的好像layout不能作為組件,在官網找到了說明:http://logback.qos.ch/codes.html#layoutInsteadOfEncoder

 

 

 官網說明:要換成encoder替換layout,還舉了兩個反例,deprecated就是不推薦使用的意思

        

 

看起來好像改的沒什么問題啊,改的肯定沒有錯,再看下這個錯 ERROR in ch.qos.logback.classic.PatternLayout("null") - Empty or null pattern

pattern是空的???,然后在配置文件里面找了好久終於發現了罪魁禍首:

 

       這應該是前人留下來的坑吧,第一眼看去encode,指定UTF8編碼,正常的在正常了,突然想到,前面寫了這么多encoder下面都是要指定pattern的,這

里為空不就剛好null,和錯誤日志對應上了,注釋掉這一行,果不其然沒有錯了,真是一個大寫的WC!!!

       問題到此結束。有疑問歡迎指出。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM