log4j1迁移log4j2的XML配置与原properties配置等价性校验
Log4j 1.x 迁移 Log4j2 2.17.1 配置等价性说明
原Log4j 1.x 配置(properties格式)
log4j.rootLogger=INFO,FILE,console log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss} %l - %m%n log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender log4j.appender.FILE.File=${jboss.server.log.dir}/application/application.log log4j.appender.FILE.layout=org.apache.log4j.PatternLayout log4j.appender.FILE.layout.ConversionPattern=[%-5p] %d{dd-MM-yyyy HH:mm:ss} %l - %m%n log4j.appender.FILE.DatePattern='.'yyyy-MM-dd
待校验的Log4j2 XML配置
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="INFO"> <Appenders> <Console name="ConsoleAppender" target="SYSTEM_OUT"> <PatternLayout pattern="[%-5p] %d{yyyy-MM-dd HH:mm:ss} %l - %m%n" /> </Console> <RollingFile name="DailyLog" fileName="${env:JBOSS_HOME}/standalone/log/application/application.log" filePattern="${env:JBOSS_HOME}/standalone/log/application/application.log.%d{yyyy-MM-dd}"> <PatternLayout pattern="[%-5p] %d{dd-MM-yyyy HH:mm:ss} %l - %m%n"/> <Policies> <TimeBasedTriggeringPolicy/> </Policies> </RollingFile> </Appenders> <Loggers> <Root level="debug"> <AppenderRef ref="ConsoleAppender" /> <AppenderRef ref="DailyLog"/> </Root> </Loggers> </Configuration>
预期日志滚动效果
application.log.2022-06-05 application.log.2022-06-06 application.log (Today, June 7th)
等价性校验结果
你在更新记录中提到的4项调整,已经修复了初版配置和Log4j 1.x行为不一致的核心问题:
- 移除冗余的
ImmediateFlush配置:Log4j2 2.17.1版本默认开启立即刷盘,和Log4j 1.x默认行为一致,不需要额外显式配置 - 调整WildFly日志路径:修正了初版路径和JBoss默认日志目录不匹配的问题,默认场景下和原配置
${jboss.server.log.dir}指向的路径一致;如果需要兼容自定义jboss.server.log.dir的场景,可以把路径中的${env:JBOSS_HOME}/standalone/log替换为${sys:jboss.server.log.dir}直接读取JBoss启动时注入的系统属性,兼容性更好 - 移除多余的FileAppender:原配置只有控制台和按天滚动的文件两个输出端,移除后Appender数量和原配置完全对齐
- 移除
TimeBasedTriggeringPolicy的Interval属性:默认Interval值为1,对应按天滚动,和原配置DailyRollingFileAppender的日滚动规则完全匹配,滚动后生成的文件命名、当天日志写入无后缀文件的行为和预期完全一致。
目前配置还剩最后一处和原配置不等价的点:当前XML中Root日志级别配置为debug,而原Log4j 1.x配置的根日志级别为INFO,会导致输出大量原配置不会打印的DEBUG级别日志。把Root节点的level="debug"修改为level="INFO"后,整个配置就和原Log4j 1.x实现完全等价,没有缺失配置项,日志格式、输出目标、滚动规则都和原有行为一致。
帖子更新记录
- 移除ImmediateFlush配置
- 调整Wildfly路径
- 移除FileAppender
- 移除TimeBasedTriggeringPolicy的Interval属性
完成上述更新调整后,配置已可正常运行。
内容的提问来源于stack exchange,提问作者user3637971
相关产品推荐
相关产品推荐

