logback更新到1.3版本tomcat无法启动问题解决

问题

银联漏洞扫描,说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. 启动工程,发现可以读取到,问题解决

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值