首 页最新软件下载排行文章资讯投稿发布下载专题
维维下载站
您的位置:首页编程开发网络编程编程其它 → 教你如何解决因缺少Log4j依赖导致应用启动失败问题

教你如何解决因缺少Log4j依赖导致应用启动失败问题

来源:维维整理 发布时间:2017-4-3 14:00:51 人气:

教你如何解决因缺少Log4j依赖导致应用启动失败问题技巧分享,日志是应用软件中不可缺少的部分,Apache的开源项目log4j是一个功能十分强大的日志组件,提供方便的日志记录。但这篇文章不是介绍Log4j,本文主要介绍了关于因缺少Log4j依赖导致应用启动失败问题的相关资料,有兴趣的朋友快来详细了解一下吧。

前言

最近该公司正在进行版本升级,并且需要排除依赖于aaa(指内部依赖性)的所有应用程序。从这个角度来看,几乎没有问题,因为它只是排除了一些maven依赖。然而,当一个同学排除了依赖性时,他只排除了aaa,但没有在测试环境中测试它。在线发布时,日志报告dubbo服务注册失败(抛出异常,dubbo管理员没有看到注册服务),导致应用程序无法启动(回滚后正常),影响正常业务5分钟。

事后排查这个问题时发现,有两个原因导致了应用启动失败:

  1. 去除aaa依赖以后,导致应用有多个slf4j的依赖
  2. 去除aaa依赖以后,导致log4j依赖缺失(应用使用logback)

第一点很容易解决,因为错误日志可以直接知道原因,修改pom依赖关系并排除非logback实现的日志依赖性。

然而,由于缺乏log4j依赖性,第二点在最终确定之前的一个下午被抛出。

下面把排查过程记录如下:

将应用回滚后正常,那么问题肯定出在回滚以后的提交上,经过和正常版本的代码的diff,发现只有zkclient的版本不同。

异常版本的依赖是如下:

1
2
3
4
5
<dependency>
 <groupId>com.github.sgroschupf</groupId>
 <artifactId>zkclient</artifactId>
 <version>0.1</version>
</dependency>

正常的依赖是:

1
2
3
4
5
<dependency>
 <groupId>com.101tec</groupId>
 <artifactId>zkclient</artifactId>
 <version>0.10</version>
</dependency>
 
分析一下,有一些解决方案,一个是直接修改zkclient的依赖关系,一个是继续分析为什么两个版本的差异会导致应用程序失败。通过继续分析,发现groupId com.101tec的日志框架使用了Slf4j,而groupId com.github.sgroschupf的日志框架是Log4j,同事在排除aaa依赖时也排除了log4j的依赖关系。 ,从而导致应用程序无法启动。

com.github.sgroschupf的log框架:

教你如何解决因缺少Log4j依赖导致应用启动失败问题

com.101tec的log框架:

然后回到dubbo注册服务失败的问题,一切都很清楚 - 因为log4j依赖关系耗尽,导致dubbo使用zkclient注册服务,因为它无法初始化Log4j,它无法初始化ZkClient,从而导致dubbo注册失败。

通过这个事件,获得如下教训:

  1. 尽量在一个系统内使用同一个日志框架
  2. 假如是依赖jar有不同的日志实现,使用更高版本的依赖
  3. 发布以前一定要记得在测试环境进行测试
相关下载
栏目导航
本类热门阅览