Log4j 1.x迁移至2.17.1遇XML配置前缀绑定错误求助
解决Log4j 2.x配置XML前缀绑定错误及适配问题
你遇到的错误根源是当前用的是Log4j 1.x的配置格式,Log4j 2.x完全不兼容这种基于DTD的旧配置,必须改用Log4j 2.x专属的XML Schema格式,同时配置项、类名、结构都要对应调整。以下是完整的修正配置和关键说明:
修正后的TEST_log4j.xml配置
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN" xmlns="http://logging.apache.org/log4j/2.0/config"> <!-- 控制台输出Appender --> <Appenders> <Console name="ConsoleAppender" target="SYSTEM_OUT"> <PatternLayout pattern="%d{MM/dd HH:mm:ss} %-5p %30.30c %ndc - %m%n"/> </Console> <!-- 文件滚动输出Appender(MyCustomClass日志) --> <RollingFile name="Fileappender" fileName="/opt/tomcat/logs/MyCustomClassLogs.log" filePattern="/opt/tomcat/logs/MyCustomClassLogs-%i.log"> <PatternLayout pattern="%d{MM/dd HH:mm:ss} %-5p %30.30c %ndc - %m%n"/> <Policies> <SizeBasedTriggeringPolicy size="5MB"/> </Policies> <DefaultRolloverStrategy max="5"/> </RollingFile> <!-- 文件滚动输出Appender(ResetClass日志) --> <RollingFile name="ResetClass" fileName="/opt/tomcat/logs/resetTrace.log" filePattern="/opt/tomcat/logs/resetTrace-%i.log"> <PatternLayout pattern="%d{MM/dd HH:mm:ss} %-5p %30.30c %ndc - %m%n"/> <Policies> <SizeBasedTriggeringPolicy size="1MB"/> </Policies> <DefaultRolloverStrategy max="5"/> </RollingFile> </Appenders> <!-- 日志Logger配置 --> <Loggers> <Logger name="com.demo.custom.filter.ResetClass" level="TRACE" additivity="false"> <AppenderRef ref="ResetClass"/> </Logger> <Logger name="com.demo.custom.test.MyCustomClass" level="TRACE" additivity="false"> <AppenderRef ref="Fileappender"/> </Logger> <!-- 根日志配置 --> <Root level="ERROR"> <AppenderRef ref="ConsoleAppender"/> </Root> </Loggers> </Configuration>
关键修改点说明
- 命名空间与Schema替换:移除Log4j 1.x的
DOCTYPE声明,改用Log4j 2.x的命名空间xmlns="http://logging.apache.org/log4j/2.0/config",直接解决前缀绑定错误 - Appender类名更新:
- Log4j1的
org.apache.log4j.ConsoleAppender→ Log4j2的<Console>标签(底层对应org.apache.logging.log4j.core.appender.ConsoleAppender) - Log4j1的
org.apache.log4j.RollingFileAppender→ Log4j2的<RollingFile>标签(底层对应org.apache.logging.log4j.core.appender.RollingFileAppender)
- Log4j1的
- 配置项结构调整:
- 原
<param>标签替换为专属配置节点,比如文件滚动策略拆分到<Policies>和<DefaultRolloverStrategy>中 - 原
MaxFileSize改为<SizeBasedTriggeringPolicy size="5MB"/>,MaxBackupIndex改为<DefaultRolloverStrategy max="5"/>
- 原
- 日志级别与Logger标签:
- 原
<category>替换为<Logger>,<priority>替换为level属性 - 原
<root>替换为<Root>,级别值统一用大写(比如error→ERROR)
- 原
- 格式符调整:原Log4j1的
%x(NDC)在Log4j2中改为%ndc,如果是MDC则用%X,这里按照你原配置的意图替换为%ndc
额外注意事项
- 确保项目依赖中完全移除Log4j 1.x的jar包,只保留Log4j 2.17.1的核心依赖(
log4j-core、log4j-api) - 若用Maven/Gradle管理依赖,建议主动排除所有Log4j 1.x的传递依赖,避免版本冲突
内容的提问来源于stack exchange,提问作者user3441151
相关产品推荐
相关产品推荐

