Tomcat Web应用如何不修改全局配置及代码将JUL替换为Log4j2
问题解答
完全可以实现,不需要修改Tomcat全局配置,也不需要改动应用源代码,仅调整WAR包内部的配置即可生效,具体操作步骤如下:
- 第一步:在WAR包的
WEB-INF/lib目录下添加3个Log4j2相关依赖包,仅存放在当前WAR包内部即可,不要上传到Tomcat全局lib目录:- log4j-api:Log4j2的核心API包
- log4j-core:Log4j2的核心实现包
- log4j-jul:JUL到Log4j2的桥接包,负责将应用内的JUL日志调用转发到Log4j2
- 第二步:在WAR包的
WEB-INF/classes目录下添加Log4j2配置文件,默认命名为log4j2.xml即可,你可以根据自身需求自定义日志输出级别、输出路径、打印格式等规则。 - 第三步:在WAR包的
WEB-INF/web.xml文件中添加上下文初始化参数,开启应用内的JUL桥接适配:
<context-param> <param-name>log4j2.julAdapterEnabled</param-name> <param-value>true</param-value> </context-param> <context-param> <param-name>log4j2.contextSelector</param-name> <param-value>org.apache.logging.log4j.core.selector.BasicContextSelector</param-value> </context-param>
补充说明:基于Tomcat的双亲委派类加载机制,WEB-INF目录下的类和依赖优先级高于Tomcat全局库,所以上述配置仅对当前WAR包对应的应用生效,不会影响Tomcat本身的日志逻辑,也不会干扰同一个Tomcat实例下部署的其他应用。
内容的提问来源于stack exchange,提问作者Saif Khan
相关产品推荐
相关产品推荐

