概述
问题
银联漏洞扫描,说logback1.1.3有漏洞不让用了,必须要更新到1.3.0-alpha5,mave依赖改完之后,发现无法启用,缺少类,然后吧slf4j-api-1.7.5更新到slf4j-api-2.0.0-alpha1,还是无法启动,报找不到StaticLoggerBinder,对比logback-classic jar包果然发现没有StaticLoggerBinder了,啥情况?
解决过程
1. 上slf4j官网看看,
意思就是说slf4j-api 1.8之后的版本不再使用静态绑定了,就是不需要StaticLoggerBinder了,用的是serviceLoader机制了
2. 查看logback-classic-1.3.0-alpha5.jar 果然发现下图的内容,意思就是说jar包引入就可以了,logback框架会自动加载,不用我们管理了,那为什么还是报找不到StaticLoggerBinder的异常呢?
3. 仔细查看tomcat启动时的日志发现,异常之前logback已经加载过一次了,是在第二次加载的时候报的异常,竟然会加载两次?什么鬼?然后尝试把web.xml中LogbackConfigListener删除,发现可以启动工程了,果然不用我们自己负载logback的加载了。 但是又发现另一个问题
4. 由于我们logback.xml中使用
<property name="LOG_HOME" value="${logs.home}" />
来配置日志的输出位置,logback找不到这个变量了,日志都输出到tomcat下面了,那为啥更新之前就可以呢
5. 梳理tomcat的启动流程
所以可以正常启动
6. jar更新后的流程,变更如下
logback提前了,当然拿不到设置的logs.home系统变量了
7. 那自己也写个类让serviceLoader加载,如果能在logback加载之前执行是不是就ok了?serviceLoader扫秒到两个实现类,是如何决定执行顺序的?logback的是LogbackServletContainerInitializer,那么建立一个比这边排序靠前的类名InitInitializer试试,并在InitInitializer中读入配置文件,写入环境变量中,工程中做如下配置
8. 启动工程,发现可以读取到,问题解决
最后
以上就是眼睛大铃铛为你收集整理的logback更新到1.3版本tomcat无法启动问题解决的全部内容,希望文章能够帮你解决logback更新到1.3版本tomcat无法启动问题解决所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复