You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Log4j 2.18配置TimeBasedTriggeringPolicy时AGE空指针报错求助

解决Log4j 2.18 RollingFileAppender配置TimeBasedTriggeringPolicy时的NullPointerException问题

你遇到的这个空指针问题根源很明确:你的IfLastModified删除策略缺少了必填的age参数。从报错栈能看到,IfLastModified类的构造函数通过Objects.requireNonNull(age)做了非空校验,而你只声明了IfLastModified的类型,却没设置具体的时间阈值,直接触发了空指针异常。

问题分析

IfLastModified是Log4j用来筛选待删除旧日志的核心条件,它必须明确“超过多久的文件需要被清理”——也就是age参数。这个参数支持带单位的时间值,比如30d(30天)、24h(24小时)、60m(60分钟)等,用来定义文件保留的最长周期。

修正后的完整配置

只需要在IfLastModified配置块中添加age参数即可,以下是修复后的log4j.properties:

name= RollingFileLogConfig
appenders = console, rolling

# Log files location
property.basePath = ./logs

# Console appender
appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %d{yyyy-MM-dd HH:mm:ss.SSS} %level [%t] [%l] - %msg%n

# RollingFileAppender name, pattern, path and rollover policy
appender.rolling.type = RollingFile
appender.rolling.name = fileLogger
appender.rolling.fileName= ${basePath}/app.log
appender.rolling.filePattern= ${basePath}/app_%d{yyyyMMdd}.log.gz
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = %d{yyyy-MM-dd HH:mm:ss.SSS} %level [%t] [%l] - %msg%n
appender.rolling.policies.type = Policies

# RollingFileAppender rotation policy
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.rolling.policies.size.size = 10MB
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.rolling.policies.time.interval = 1
appender.rolling.policies.time.modulate = true
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.delete.type = Delete
appender.rolling.strategy.delete.basePath = ${basePath}
appender.rolling.strategy.delete.maxDepth = 10
appender.rolling.strategy.delete.ifLastModified.type = IfLastModified
# 新增age参数,示例设置为保留30天内的日志,可按需调整
appender.rolling.strategy.delete.ifLastModified.age = 30d

# Configure root logger
rootLogger.level = trace
rootLogger.appenderRefs = stdout, rolling
rootLogger.appenderRef.rolling.ref = fileLogger
rootLogger.appenderRef.stdout.ref = STDOUT

额外说明

  • 你可以根据实际需求调整age的数值和单位:比如要保留7天日志就设为7d,要保留12小时就设为12h;
  • 配置Log4j的策略类时,一定要确认所有必填参数都已配置,这类空指针问题大多是遗漏核心配置项导致的。

内容的提问来源于stack exchange,提问作者kyc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 18:15:36