因为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,那只需要换下包就好了。

com.example

example-common

log4j

log4j

org.apache.logging.log4j

log4j-slf4j-impl

2.17.1

org.apache.logging.log4j

log4j-web

2.17.1

代码更换

根据官网说明,从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。

log4jConfiguration

/WEB-INF/log4j2.xml

注册监听器

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

org.apache.logging.log4j.web.Log4jServletContextListener

over

好了,这样就能成功输出日志了。

好文阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: