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

使用%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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 01:47:29