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

       问题到此结束。有疑问欢迎指出。

 

posted @ 2020-02-27 13:37  雪见  阅读(5601)  评论(0编辑  收藏  举报