使用%d{UNIX}配置Log4j2文件滚动失效,报无工厂方法错误
Log4j2滚动文件Appender配置%d{UNIX}失败问题解决
问题背景
配置RollingFileAppender时使用%d{UNIX}作为文件名后缀,出现实例化失败报错。
相关配置信息
Gradle依赖
implementation group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.24.1' implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.24.1'
log4j2.xml配置
<RollingFile name="ROLLING" fileName="logs/app.log" filePattern="logs/app-%d{UNIX}.log.gz" ignoreExceptions="false"> <PatternLayout> <Pattern>%m%n</Pattern> </PatternLayout> <Policies> <TimeBasedTriggeringPolicy interval="5" modulate="true"/> <SizeBasedTriggeringPolicy size="20 KB"/> </Policies> <DefaultRolloverStrategy max="10"/> </RollingFile>
报错信息
ERROR Unable to invoke factory method in class org.apache.logging.log4j.core.appender.RollingFileAppender for element RollingFile: java.lang.IllegalStateException: No factory method found for class org.apache.logging.log4j.core.appender.RollingFileAppender java.lang.IllegalStateException: No factory method found for class org.apache.logging.log4j.core.appender.RollingFileAppender
问题原因
%d{UNIX}表示自1970年以来的秒级时间戳,属于纯数值格式。而TimeBasedTriggeringPolicy需要基于可解析的时间单位(如年、月、日、分等)计算滚动间隔,无法通过UNIX时间戳判断何时达到设定的5分钟滚动条件,导致配置解析失败,无法实例化RollingFileAppender。
解决方法
方案1:改用标准时间格式(支持时间+大小双策略滚动)
修改filePattern为包含可识别时间单位的格式,让TimeBasedTriggeringPolicy正常工作:
<RollingFile name="ROLLING" fileName="logs/app.log" filePattern="logs/app-%d{yyyyMMddHHmmss}.log.gz" ignoreExceptions="false"> <PatternLayout> <Pattern>%m%n</Pattern> </PatternLayout> <Policies> <TimeBasedTriggeringPolicy interval="5" modulate="true"/> <SizeBasedTriggeringPolicy size="20 KB"/> </Policies> <DefaultRolloverStrategy max="10"/> </RollingFile>
方案2:保留UNIX时间戳,仅按文件大小滚动
移除TimeBasedTriggeringPolicy,仅保留大小触发策略,此时文件名使用UNIX时间戳:
<RollingFile name="ROLLING" fileName="logs/app.log" filePattern="logs/app-%d{UNIX}.log.gz" ignoreExceptions="false"> <PatternLayout> <Pattern>%m%n</Pattern> </PatternLayout> <Policies> <SizeBasedTriggeringPolicy size="20 KB"/> </Policies> <DefaultRolloverStrategy max="10"/> </RollingFile>
内容的提问来源于stack exchange,提问作者RCS
相关产品推荐
相关产品推荐

