Log4j 2.24.2配置文件报错:根元素不匹配,请求排查原因
Log4j 2配置文件解析错误问题
配置文件(取自Apache官方文档)
<?xml version="1.0" encoding="UTF-8"?> <Configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="https://logging.apache.org/xml/ns" xsi:schemaLocation=" https://logging.apache.org/xml/ns https://logging.apache.org/xml/ns/log4j-config-2.xsd"> <Appenders> <Console name="CONSOLE"> <JsonTemplateLayout/> </Console> </Appenders> <Loggers> <Logger name="com.mycompany" level="INFO"/> <Root level="WARN"> <AppenderRef ref="CONSOLE"/> </Root> </Loggers> </Configuration>
运行后错误信息
log4j:WARN Continuable parsing error 6 and column 79 log4j:WARN Document root element "Configuration", must match DOCTYPE root "null". log4j:WARN Continuable parsing error 6 and column 79 log4j:WARN Document is invalid: no grammar found. log4j:ERROR DOM element is - not a <log4j:configuration> element. log4j:WARN No appenders could be found for logger (org.springframework.web.context.ContextLoader). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
环境信息
- Log4j版本:2.24.2
- 运行环境:Java 8 + Tomcat 9
问题
使用上述配置文件运行后出现解析错误,请问这是产品Bug还是文档Bug?
解答
这既不是Log4j 2的产品Bug,也不是官方文档的Bug,核心原因是项目中同时存在Log4j 1.x和Log4j 2.x的依赖。
从错误信息里的log4j:ERROR DOM element is - not a <log4j:configuration> element以及指向Log4j 1.2文档的链接可以看出,实际加载配置的是Log4j 1.x的解析器——而你使用的是Log4j 2.x的配置格式(根元素为<Configuration>,Log4j 1.x要求根元素是<log4j:configuration>),两者格式不兼容导致解析失败。
解决步骤:
- 检查项目依赖,移除所有Log4j 1.x相关的jar包(如
log4j-1.x.x.jar)。 - 确保Log4j 2.x核心依赖完整,包括
log4j-core、log4j-api;若使用JSON模板布局,还需引入log4j-layout-template-json依赖。 - 针对Tomcat环境,检查容器自身是否引入了Log4j 1.x依赖,必要时通过排除依赖或调整类加载优先级解决冲突。
内容的提问来源于stack exchange,提问作者Thom
相关产品推荐
相关产品推荐

