0

0

Log4j 1到Log4j 2迁移后仍旧引用旧配置的排查与解决

霞舞

霞舞

发布时间:2025-10-19 13:25:15

|

834人浏览过

|

来源于php中文网

原创

Log4j 1到Log4j 2迁移后仍旧引用旧配置的排查与解决

在将javaee项目从log4j 1迁移到log4j 2时,即使更新了依赖、配置文件和代码,项目仍可能因残留的log4j 1配置而报错。本文将深入探讨此类问题的常见原因,特别是`web.xml`中遗留的log4j 1相关配置,并提供详细的排查步骤和解决方案,旨在帮助开发者彻底清除旧配置,确保log4j 2平稳运行,避免因配置冲突导致的日志系统异常。

Log4j 1到Log4j 2迁移概述

Log4j 2相较于Log4j 1在性能、功能和灵活性上都有显著提升。迁移通常涉及以下几个核心步骤:

  1. 更新Maven/Gradle依赖:移除所有Log4j 1相关的依赖(如log4j:log4j),并引入Log4j 2的核心依赖(org.apache.logging.log4j:log4j-api和org.apache.logging.log4j:log4j-core)。
  2. 排除传递性依赖:检查项目中其他库(如docx4j、Spring旧版本等)是否间接引入了Log4j 1,并通过Maven的标签或Gradle的exclude规则将其排除。
  3. 更新配置文件:将log4j.xml、log4j.properties等Log4j 1配置文件替换为log4j2.xml、log4j2.properties或log4j2.json,并根据Log4j 2的语法进行配置。
  4. 代码适配:如果代码中直接使用了Log4j 1的API,需要更新为Log4j 2的API。若希望保持Log4j 1 API兼容性,可引入Log4j 2的Log4j 1 API桥接器(org.apache.logging.log4j:log4j-1.2-api)。
  5. 清理旧文件:删除旧的Log4j 1相关的DTD文件或配置文件。

迁移陷阱:残留的Log4j 1配置

即使完成了上述所有步骤,在某些JavaEE项目中,尤其是在使用Spring框架的传统Web应用中,仍可能遇到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  element.

这些错误信息明确指出Log4j 1的XML解析器正在尝试解析一个不符合其DTD的配置,甚至可能尝试将Log4j 2的配置文件(如log4j2.xml)误认为是Log4j 1的配置。这通常意味着某个地方仍在显式或隐式地加载Log4j 1的配置机制。

深入排查:定位旧配置源头

当Log4j 1的错误信息持续出现时,需要进行更深入的排查:

  1. 检查所有pom.xml文件:确保所有模块的pom.xml都已正确排除Log4j 1依赖,并且没有其他传递性依赖引入。
  2. 全局文件搜索:在整个项目工作区甚至服务器配置目录中,搜索log4j.xml、log4j.properties、Log4jConfigListener等关键字,以排除任何隐藏的旧配置文件或配置引用。
  3. 检查应用服务器配置:对于Tomcat等Servlet容器,检查其context.xml或其他配置文件中是否有Log4j相关的配置。

解决方案:移除web.xml中的Log4j 1配置

在许多JavaEE或Spring Web应用中,web.xml是一个容易被忽视的关键点。Spring框架在早期版本中提供了Log4jConfigListener来集成Log4j 1,并通过context-param指定Log4j 1配置文件的位置。如果这些配置在迁移到Log4j 2后未被移除,Web容器启动时仍会尝试加载Log4j 1的日志系统。

以下是典型的web.xml中可能存在的Log4j 1相关配置:

Tago AI
Tago AI

AI生成带货视频,专为电商卖货而生

下载

    log4jConfigLocation
    classpath:log4j.xml



    log4jExposeWebAppRoot
    false



    org.springframework.web.util.Log4jConfigListener
  • log4jConfigLocation: 这个参数明确指示Web容器去类路径下寻找名为log4j.xml的Log4j 1配置文件。
  • log4jExposeWebAppRoot: 这是Log4j 1的一个辅助配置,用于决定是否将Web应用根目录暴露给Log4j。
  • org.springframework.web.util.Log4jConfigListener: 这是Spring框架提供的Log4j 1集成监听器,它会在Web应用启动时初始化Log4j 1日志系统。

解决办法

将上述所有Log4j 1相关的配置从web.xml中彻底删除。在Log4j 2时代,尤其是在Spring Boot项目中,通常不需要在web.xml中显式配置日志监听器,Log4j 2会通过其自身的查找机制(如在classpath下查找log4j2.xml)或通过Spring Boot的自动配置来初始化。

删除这些配置后,重新部署并启动应用,Log4j 1的错误信息应该会消失,并且Log4j 2会按照log4j2.xml或其他Log4j 2配置文件正常工作。

迁移注意事项与最佳实践

  1. 彻底清理依赖:使用Maven或Gradle的依赖树分析工具(如mvn dependency:tree或gradle dependencies)来检查所有模块的运行时依赖,确保没有Log4j 1的残留。
  2. Log4j 2配置文件的命名与位置:Log4j 2默认会按特定顺序在classpath下查找配置文件,例如log4j2.xml、log4j2.json、log4j2.properties。确保你的Log4j 2配置文件命名正确且放置在classpath可访问的位置。
  3. Log4j 2桥接器:如果项目中存在大量遗留代码仍使用Log4j 1的API(如org.apache.log4j.Logger),可以引入Log4j 2的Log4j 1 API桥接器(log4j-1.2-api)。这允许旧代码无需修改即可将日志路由到Log4j 2。
  4. Spring Boot集成:对于Spring Boot项目,Log4j 2的集成通常更加简单,只需引入spring-boot-starter-log4j2依赖并排除默认的spring-boot-starter-logging即可。Spring Boot会自动配置Log4j 2。
  5. 测试验证:迁移完成后,务必运行全面的测试,确保日志输出符合预期,没有丢失或格式错误的情况。

总结

将项目从Log4j 1迁移到Log4j 2是一个涉及多方面的任务。除了更新依赖、配置文件和代码,对web.xml等部署描述符的彻底检查同样至关重要。残留的Log4j 1配置,特别是Log4jConfigListener和相关的context-param,是导致迁移后仍出现Log4j 1错误日志的常见原因。通过系统性的排查和清理,可以确保Log4j 2在项目中平稳、高效地运行。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
如何配置Tomcat环境变量
如何配置Tomcat环境变量

配置Tomcat环境变量需要在系统中添加CATALINA_HOME变量,并将Tomcat的安装路径添加到PATH变量中。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

114

2023.10.26

idea如何集成Tomcat
idea如何集成Tomcat

idea集成Tomcat的步骤:1、添加Tomcat服务器配置;2、配置项目部署;3、运行Tomcat服务器;4、访问项目;5、注意事项;6、关闭Tomcat服务器。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

169

2024.02.23

怎么查看Tomcat源代码
怎么查看Tomcat源代码

查看Tomcat源代码的步骤:1、下载Tomcat源代码;2、在IDEA中导入Tomcat源代码;3、查看源代码;4、理解Tomcat的工作原理;5、参与社区和贡献;6、注意事项;7、持续学习和更新;8、使用工具和插件。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

97

2024.02.23

常见的tomcat漏洞有哪些
常见的tomcat漏洞有哪些

常见的tomcat漏洞有:1、跨站脚本攻击;2、跨站请求伪造;3、目录遍历漏洞;4、缓冲区溢出漏洞;5、配置漏洞;6、第三方组件漏洞。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

163

2024.02.23

tomcat日志乱码怎么解决
tomcat日志乱码怎么解决

tomcat日志乱码的解决办法:1、修改tomcat的日志编码设置;2、检查ide的编码设置;3、检查操作系统的编码设置;4、使用过滤器处理日志;5、检查外部系统的编码设置;6、检查文件编码方式等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

151

2024.02.23

weblogic和tomcat有哪些区别
weblogic和tomcat有哪些区别

weblogic和tomcat的区别:1、功能;2、性能;3、规模;4、价格;5、安全性;6、配置和管理;7、社区支持;8、集成能力;9、升级和更新;10、可靠性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

198

2024.02.23

tomcat和nginx有哪些区别
tomcat和nginx有哪些区别

tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

233

2024.02.23

tomcat启动闪退怎么解决
tomcat启动闪退怎么解决

tomcat启动闪退的解决办法:1、检查java环境;2、检查环境变量配置;3、检查端口被占用;4、检查配置文件编码;5、检查启动时需要的配置文件;6、检查相关文件是否丢失;7、检查防火墙和杀毒软件设置。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

161

2024.02.23

clawdbot ai使用教程 保姆级clawdbot部署安装手册
clawdbot ai使用教程 保姆级clawdbot部署安装手册

Clawdbot是一个“有灵魂”的AI助手,可以帮用户清空收件箱、发送电子邮件、管理日历、办理航班值机等等,并且可以接入用户常用的任何聊天APP,所有的操作均可通过WhatsApp、Telegram等平台完成,用户只需通过对话,就能操控设备自动执行各类任务。

14

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 3万人学习

C# 教程
C# 教程

共94课时 | 7.9万人学习

Java 教程
Java 教程

共578课时 | 52.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号