logback Appender [FILE_ALL] failed to append. java.lang.NullPointerException

1. 描述

logback 日志文件大小超出maxFileSize值后,没创建新日志文件,抛出NullPointerException。

  • 配置:
<appender name="FILE_ALL" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 滚动策略: TimeBasedRollingPolicy按时间滚动;SizeAndTimeBasedRollingPolicy按日期归档文件,但同时限制每个日志文件的大小-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--路径&日志文件输出的文件名-->
            <FileNamePattern>${LOG_PATH}_%d{yyyy-MM-dd}.log</FileNamePattern>
            <!--日志文件保留天数(maxHistory属性优先级高于totalSizeCap)-->
            <maxHistory>15</maxHistory>
            <totalSizeCap>50KB</totalSizeCap>
        </rollingPolicy>
        <!--日志文件最大的大小, 默认值10MB-->
		<TriggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>10KB</maxFileSize>
        </TriggeringPolicy>
        <encoder>
            <Pattern>${FILE_LOG_PATTERN}</Pattern>
        </encoder>
    </appender>
  • 环境
IDE: 2021.3
spring boot: 2.5.6 (spring-boot-starter-logging: 2.5.6 --- logback-classic: 1.2.6)

2. 问题

  • ERROR in ch.qos.logback.core.rolling.RollingFileAppender[FILE_ALL] - Appender [FILE_ALL] failed to append. java.lang.NullPointerException
    *
  • 原因:
    在这里插入图片描述
    总结:
    RollingFileAppender.subAppend方法中执行的不是TimeBasedRollingPolicy自身的isTriggeringEvent方法,所以出现对应不上的问题。

3. 解决

  • 配置TimeBasedRollingPolicy的TimeBasedFileNamingAndTriggeringPolicy属性。
    在这里插入图片描述
   <!-- 日志输出:RollingFileAppender-根据rollingPolicy(滚动策略)和TriggeringPolicy(触发策略)输出日志 -->
   <appender name="FILE_ALL" class="ch.qos.logback.core.rolling.RollingFileAppender">
       <!-- 滚动策略: TimeBasedRollingPolicy按时间滚动;SizeAndTimeBasedRollingPolicy按日期归档文件,但同时限制每个日志文件的大小-->
       <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
           <!--路径&日志文件输出的文件名-->
           <FileNamePattern>${LOG_PATH}_%d{yyyy-MM-dd}.part_%i.log.log</FileNamePattern>
           <!--日志文件保留天数(maxHistory属性优先级高于totalSizeCap)-->
           <maxHistory>15</maxHistory>
           <totalSizeCap>50KB</totalSizeCap>
           <!-- appender启动时,进行一次日志文件清理(作用:有些存活很短时间的应用,没机会进行文件清理) -->
           <cleanHistoryOnStart>true</cleanHistoryOnStart>
           <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
               <maxFileSize>10KB</maxFileSize>
           </timeBasedFileNamingAndTriggeringPolicy>
       </rollingPolicy>
       <encoder>
           <Pattern>${FILE_LOG_PATTERN}</Pattern>
       </encoder>
   </appender>
  • 结果:
    在这里插入图片描述

4. 滚动策略与触发策略

   <!-- 对应一: FixedWindowRollingPolicy + SizeBasedTriggeringPolicy -->
   <appender name="FILE_1" class="ch.qos.logback.core.rolling.RollingFileAppender">
       <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
           <minIndex>1</minIndex>
           <maxIndex>3</maxIndex>
       </rollingPolicy>
       <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
           <maxFileSize>10KB</maxFileSize>
       </triggeringPolicy>
   </appender>

   <!-- 对应二: 时间(TimeBasedRollingPolicy + DefaultTimeBasedFileNamingAndTriggeringPolicy)-->
   <appender name="FILE_2" class="ch.qos.logback.core.rolling.RollingFileAppender">
       <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
           <!-- 默认策略可以不配置-->
           <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy" />
       </rollingPolicy>
   </appender>

   <!-- 对应三:时间和文件大小(TimeBasedRollingPolicy + SizeAndTimeBasedFNATP)-->
   <appender name="FILE_3" class="ch.qos.logback.core.rolling.RollingFileAppender">
       <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
           <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
               <maxFileSize>10KB</maxFileSize>
           </timeBasedFileNamingAndTriggeringPolicy>
       </rollingPolicy>
   </appender>

5. 资料

logback 手册appender标签:https://logback.qos.ch/manual/appenders.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值