Log4j2配置DailyRollingFileAppender提示appender无效元素错误如何解决
问题原因
- 你的项目使用的是Log4j 2.x版本,配置文件为
log4j2.xml,但新增的文件日志配置采用的是Log4j 1.x的语法规范,两者配置格式完全不兼容 - Log4j 2.x不识别1.x版本的小写
<appender>、<param>标签,也不支持org.apache.log4j.DailyRollingFileAppender这个1.x的组件,因此会抛出无效元素、无法定位File appender的报错
正确配置方式
Log4j 2.x中自带按时间滚动的日志实现,使用<RollingFile>标签配合时间触发策略即可实现按天滚动存储,完整可用的配置如下:
<?xml version="1.0" encoding="UTF-8"?> <Configuration package="log4j.test" status="WARN"> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Console> <!-- 按天滚动的文件日志配置 --> <RollingFile name="File" fileName="logs/trace.log" filePattern="logs/trace-%d{yyyy-MM-dd}.log" append="true" encoding="UTF-8"> <PatternLayout pattern="%d{[dd.MM.yyyy HH:mm:ss.SSS]} %l %p:%n %m%n"/> <Policies> <!-- 时间滚动策略,interval=1 单位为filePattern中最小的时间单位,这里是天,即每天滚动一次 --> <TimeBasedTriggeringPolicy interval="1" modulate="true"/> </Policies> <!-- 可选配置:保留最近30天的日志,避免文件过多占用磁盘 --> <DefaultRolloverStrategy max="30"/> </RollingFile> </Appenders> <Loggers> <Root level="trace"> <AppenderRef ref="Console"/> <AppenderRef ref="File"/> </Root> </Loggers> </Configuration>
配置说明
fileName:指定当前正在写入的日志文件路径filePattern:指定日志滚动后的命名格式,这里配置的%d{yyyy-MM-dd}代表按天分割,滚动后的文件名为trace-2024-05-20.log这类格式TimeBasedTriggeringPolicy:时间触发策略,interval="1"代表每1个单位时间滚动一次,单位由filePattern中配置的最小时间粒度决定,此处配置到天,就是每天滚动一次;modulate="true"代表滚动时间对齐到每天0点DefaultRolloverStrategy:可选配置,设置最多保留的历史日志文件数量,避免长期运行日志占用磁盘过多
内容的提问来源于stack exchange,提问作者Alexei
相关产品推荐
相关产品推荐

