因为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,那只需要换下包就好了。
代码更换
根据官网说明,从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。
注册监听器
1.x版本的监听器是spring自带的,他会去找参数名字为log4jConfigurationLocation的配置。所以即使上一步都改对了,也无法正确打印日志。需要引入web-log4j2的包,也就是我前面maven里面的第二个依赖。
over
好了,这样就能成功输出日志了。
好文阅读
发表评论