• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Java > 解决因缺少Log4j依赖导致应用启动失败的问题

解决因缺少Log4j依赖导致应用启动失败的问题

作者:rhwayfunn 字体:[增加 减小] 来源:互联网 时间:2017-05-28

rhwayfunn 通过本文主要向大家介绍了log4j依赖,log4j 依赖包,log4j maven依赖,log4j,log4j配置文件详解等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

前言

最近公司在做版本升级,所有对aaa(指代某个内部依赖)有依赖的应用需要排除掉。从这点看,几乎不会有什么问题,因为仅仅是排除一些maven依赖而已嘛。但是,一位同学在排除依赖的时候,仅仅是把aaa排除了,而没有在测试环境进行测试,在线上发布的时候,日志报dubbo服务注册失败(抛异常和dubbo admin没有看到注册的服务),导致应用启动失败(回滚后正常),影响正常业务5分钟。

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

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

第一点很好解决,因为从error日志可以直接知道原因,修改pom依赖并把非logback实现的日志依赖排掉就好了。

但是,第二点折腾了一下午才最终确定是因为log4j依赖缺失导致的。

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

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

异常版本的依赖是如下:

<dependency>
 <groupId>com.github.sgroschupf</groupId>
 <artifactId>zkclient</artifactId>
 <version>0.1</version>
</dependency>
</div>

正常的依赖是:

<dependency>
 <groupId>com.101tec</groupId>
 <artifactId>zkclient</artifactId>
 <version>0.10</version>
</dependency>
</div>

分析到这里,已经有了解决思路,一种是直接修改zkclient的依赖,一种是继续分析为什么两种版本的不同会导致应用启动失败。通过继续分析,发现groupId为com.101tec的日志框架使用的是Slf4j,而groupId为com.github.sgroschupf的日志框架是Log4j,而那位同事在排除aaa依赖的时候顺便把log4j的依赖也排掉了,所以才导致应用启动失败。

com.github.sgroschupf的log框架:

com.101tec的log框架:

再回到刚开始dubbo注册服务失败的问题,一切都明了了——因为把log4j依赖排掉了,导致dubbo使用zkclient注册服务的时候因为无法初始化Log4j,导致无法初始化ZkClient,进而导致dubbo注册失败。

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

  1. 尽量在一个系统内使用同一个日志框架
  2. 如果是依赖jar有不同的日志实现,使用更高版本的依赖
  3. 发布之前一定要记得在测试环境进行测试

总结

以上就是关于因缺少Log4j依赖导致应用启动失败的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 解决因缺少Log4j依赖导致应用启动失败的问题

相关文章

  • 2017-05-28java加载properties文件的六种方法总结
  • 2017-05-28详解Spring Boot 集成Shiro和CAS
  • 2017-05-28SSM框架+Plupload实现分块上传大文件示例
  • 2017-05-28使用eclipse快速新建spirngboot项目的方法
  • 2017-05-28java中的Struts2拦截器详解
  • 2017-05-28spring启动加载程序的几种方法介绍
  • 2017-05-28Java生产1-100的随机数简单实例(分享)
  • 2017-05-28Spring+SpringMVC+MyBatis深入学习及搭建(二)之MyBatis原始Dao开发和mapper代理开发
  • 2017-05-28详解spring security 配置多个AuthenticationProvider
  • 2017-05-28Spring Boot 基于注解的 Redis 缓存使用详解

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Spring boot实现文件上传实例(多文件上传)
    • 爬虫技术详解
    • Java中equals()方法重写实现代码
    • Java中ArrayList和LinkedList之间的区别_动力节点Java学院整理
    • Java 选择排序、插入排序、希尔算法实例详解
    • java application maven项目打自定义zip包实例(推荐)
    • Java正则表达式_动力节点Java学院整理
    • Spring boot 整合CXF开发web service示例
    • spring boot整合Swagger2的示例代码
    • 浅谈java中为什么实体类需要实现序列化

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有