
本文针对log4j 1迁移至log4j 2后,应用仍尝试加载log4j 1配置的常见问题提供解决方案。即使表面上已移除所有log4j 1依赖和配置,某些隐蔽的旧配置(如`web.xml`中的spring log4j集成配置)仍可能导致错误。教程将指导读者识别并清除这些残留配置,确保log4j 2正常运行。
将JavaEE项目从Log4j 1.x版本迁移到Log4j 2.x是一个常见的升级任务,旨在利用Log4j 2带来的性能提升、模块化设计和更强大的功能。然而,尽管表面上对Maven pom.xml、代码和日志配置文件进行了更新,许多开发者仍会遇到应用程序在启动时尝试加载Log4j 1配置的问题。这通常表现为控制台输出Log4j 1特有的警告和错误信息,指示它正在寻找log4j.xml或解析Log4j 1的配置标签。
当Log4j 1的旧配置机制仍在运行时,通常会伴随以下类型的日志输出:
log4j:WARN Continuable parsing error 2 and column 31 log4j:WARN L'élément racine de document "Configuration" doit correspondre à la racine DOCTYPE "null". log4j:WARN Continuable parsing error 2 and column 31 log4j:WARN Le document nest pas valide : aucune grammaire détectée. log4j:ERROR DOM element is - not a <log4j:configuration> element.
这些警告和错误信息明确指出,Log4j 1的XML解析器正在尝试处理一个不符合其DTD(如log4j:configuration)的配置,或者找不到预期的log4j.xml文件。这表明即使您已将log4j.xml替换为log4j2.xml,并移除了Log4j 1的依赖,某些组件仍在激活Log4j 1的初始化逻辑。
在深入挖掘潜在的隐藏配置之前,应确保已完成以下基础迁移工作:
<dependency>
<groupId>some.group</groupId>
<artifactId>some-artifact</artifactId>
<version>1.0.0</version>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>在JavaEE或Spring Web项目中,一个常见的被忽视的Log4j 1残留配置位于web.xml文件中。这些配置通常用于在Web应用程序启动时初始化Log4j 1,尤其是在与Spring框架集成时。
问题通常出在以下web.xml片段:
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:log4j.xml</param-value>
</context-param>
<context-param>
<param-name>log4jExposeWebAppRoot</param-name>
<param-value>false</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>解析这些配置:
解决方案:
对于已迁移到Log4j 2的项目,这些web.xml中的配置是完全多余且有害的。Log4j 2有其自身的初始化机制,通常通过Log4jServletContainerInitializer(在Servlet 3.0+环境中自动发现)或直接通过类路径扫描log4j2.xml来完成。因此,直接移除web.xml中上述所有Log4j 1相关的context-param和listener配置即可解决问题。
移除后的web.xml片段将不再包含这些内容。
在移除Log4j 1的旧配置后,您需要确保Log4j 2能够正确初始化。
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-web</artifactId>
<version>2.19.0</version> <!-- 确保与log4j-core版本一致 -->
</dependency>Log4j 1到Log4j 2的迁移不仅仅是替换依赖和配置文件那么简单,还需要对应用程序中所有可能引用旧日志框架的地方进行彻底检查。特别是对于复杂的JavaEE项目,web.xml中隐藏的Spring Log4j 1集成配置是导致迁移失败的一个常见原因。
关键注意事项:
通过细致的排查和清理,您可以成功地将项目迁移到Log4j 2,享受其带来的各项优势。
以上就是Log4j 1 到 Log4j 2 迁移后仍加载旧配置:深入排查与解决方案的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号