tomacat升级log4j2.17.1版本,log4j2升级后还是读取log4j1怎么办解决方案

因为log4j版本有漏洞,需要升级版本。但是从1到2,又加上环境比较老,就不只是换个包就完事了。由于这个项目年代久远,用的都是tomcat,而我已经好久没用过tomcat,只记得怎么启动,不记得具体配置逻辑了。所以升级版本以后,虽然项目能正常运行,但日志和管理台一直无法正常输出。明明改了配置,还是去读的log4j1.x的版本信息,也就是原来的配置。于是整理了一下需要改的几个点,应该能解决tomcat+log4j2的问题了。

maven导入log4j2.7.1版本

可以点击项目右侧查询依赖log4j的依赖关系,如果是别的包里引入了log4j.需要在对应的maven下过滤
在这里插入图片描述

题外话

我导入的是log4j-slf4j过渡版本,但如果你没有用slf4j的话,可以直接用log4j就行了。主要是我搞不清楚这个老项目用的是log4j还是slf4j,所以干脆就导入了这个,比较省事。不过后来想想,其实应该没有用slf4j,毕竟我改了很多直接用Logger.getLogger()获取日志的代码。
这么想想,slf4j确实比较好用。像这种要升级版本的情况,我们还得改具体代码,虽说全局替换一下工作量也不是很大,但一个个导入终归还是劳神,不小心换错了也不方便。如果用的是slf4j,那只需要换下包就好了。

<dependency>
			<groupId>com.example</groupId>
			<artifactId>example-common</artifactId>
			<exclusions>
				<!--排除log4j依赖-->
				<exclusion>
					<groupId>log4j</groupId>
					<artifactId>log4j</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<!--指定2.17.1版本log4j依赖,注意groupId和1不一样。-->
		<dependency>
			<groupId>org.apache.logging.log4j</groupId>
			<artifactId>log4j-slf4j-impl</artifactId>
			<version>2.17.1</version>
		</dependency>
		<!--指定web注册需要的监听器-->
		<dependency>
			<groupId>org.apache.logging.log4j</groupId>
			<artifactId>log4j-web</artifactId>
			<version>2.17.1</version>
		</dependency>

代码更换

根据官网说明,从1升级到2,有的方法需要进行替换。
在这里插入图片描述

	
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
	// 1.x的用法
	private static Logger logger = Logger.getLogger(Example.class);
	// 2.x的用法
	private static Logger logger = LogManager.getLogger(Example.class);

web.xml注册

一般来说,按照上述的改动就升级成功了。但是我这边日志什么内容都没有,果然tomcat就是比较麻烦。现在应该也没啥人用了,网上搜都是陈年的老旧内容了……

注册参数

说回正题,注册的元素这里两个都要改。一个是log4jConfiguration,一个是WEB-INF/log4j2.xml.
这里说一下,需要在对应目录下创建log4j2.xml

  <context-param>
    <param-name>log4jConfiguration</param-name>
    <param-value>/WEB-INF/log4j2.xml</param-value>
<!--    原配置内容-->
<!--    <param-value>/WEB-INF/log4j.properties</param-value>-->
  </context-param>

注册监听器

1.x版本的监听器是spring自带的,他会去找参数名字为log4jConfigurationLocation的配置。所以即使上一步都改对了,也无法正确打印日志。需要引入web-log4j2的包,也就是我前面maven里面的第二个依赖。

<listener>
    <listener-class>org.apache.logging.log4j.web.Log4jServletContextListener
    </listener-class>
  </listener>

over

好了,这样就能成功输出日志了。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值