博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
slf4j-api下的log4j与logback包冲突
阅读量:6655 次
发布时间:2019-06-25

本文共 1802 字,大约阅读时间需要 6 分钟。

hot3.png

#1 问题描述# 千丁洗衣项目qd-laundry工程在部署到线上服务器时,由于会存在memcached的心跳机制,不断的有心跳日志输出,且日志级别为DEBUG,导致每天的日志文件都非常大,大概在27G左右。所以必须要关掉memcached的心跳日志输出。

#2 排查过程#

  1. 问题重现:在DEV环境,确定Slf4j与Log4j Jar包依赖是否正确;【结果:Jar包依赖无问题】
  2. 确定log4j.xml的日志级别,全部改成INFO,不存在DEBUG。【结果:memcached的心跳日志仍输出】
  3. 查看启动日志,确定Log4j加载的log4j.xml是否正确。【结果:确实加载正确的log4j.xml】
  4. 确定是否依赖其他具体日志实现的Jar包。【结果:在POM依赖中,有平台Jar包依赖了logback】
com.qding.basis.user
api
# 其api的POM中又依赖了logback:
ch.qos.logback
logback-classic

#3 解决方案#

  • 修改POM文件去掉logback的依赖,或者排除掉logback依赖。
com.qding.basis.user
api
ch.qos.logback
logback-classic
ch.qos.logback
logback-core
  • 在此再罗嗦一下,简单说一下Mvn工程Pom文件中dependency之间各jar包版本的依赖关系:
  1. pom文件的依赖按声明顺序上到下读取,即先声明的优先,例如:pom文件中依赖的声明顺序由上向下为:
dependency:A(1.0.1)dependency:A(1.0.2)

那么系统依赖肯定是依赖A1.0.1,因为该依赖最先被声明,后面的被Omitted(忽略)。

  1. 对于间接依赖,采用最短路径优先算法,距离短的被采用, 其中“—”表示间接依赖:
A—B—C—D(1.0.0)F—E—D(1.0.1)

其中A间接依赖B,B又间接依赖C,C又间接依赖D,此时路径距离为3;另一个依赖:F间接依赖E,E间接依赖D,此时路径为2;根据最短路径优先原则,会依赖F-E-D(1.0.1)中的D(1.0.1)版本。

  1. 对于间接依赖路径长度相同的,谁先声明选谁,和A的规则是一样的:
A—B—C—D(1.0.0)F—E—K—D(1.0.1)

路径长度相同,先声明者优先选取,肯定选取D(1.0.0)。

#4 问题总结#

  • 对于排除同个jar包多个版本的冲突问题:

首先搞清楚各个Jar包之间的依赖关系:对于用eclipse工具的mvn工程,可以直接查看pom文件中的dependency Hierarchy或者用命令 mvn dependency:tree 将依赖关系展现出来,这样就知道哪个间接的版本有问题;

然后选择合适的版本,剔除不想要的版本:通常是高版本优先,可以在Pom文件中比较靠前的位置显示声明一个高版本,或者排除某个低版本依赖;

  • 当Slf4j下同时存在log4j和logback包时,会存在多个StaticLoggerBinder类冲突,Slf4j会随机选择一个StaticLoggerBinder加载生成实例。

转载于:https://my.oschina.net/xianggao/blog/520609

你可能感兴趣的文章
HDU 2883 kebab【最大流】
查看>>
2 GPS utility methods
查看>>
Scrum立会报告+燃尽图(十一月十九日总第二十七次):功能开发与修复上一阶段bug...
查看>>
Scrum立会报告+燃尽图(十二月十一日总第四十二次):贡献分配和收集用户报告...
查看>>
Jmail在ASP.NET中的应用
查看>>
xpath使用
查看>>
K均值算法-python实现
查看>>
ie6 height与各个浏览器兼容的问题
查看>>
几个不错的JQuery UI框架
查看>>
在Golang中获取系统的磁盘空间内存占用
查看>>
asp.net 面向对象方式的传值
查看>>
git版本工具(团队开发常用)
查看>>
常见的几种最优化方法
查看>>
js事件循环机制辨析
查看>>
Windows的四类消息
查看>>
作为程序猿,怎么证明你的代码打得稳?这个回答绝了
查看>>
BZOJ-1010-[HNOI2008]玩具装箱toy(斜率优化)
查看>>
win7下安装oracle10g出现未知错误,程序异常终止
查看>>
制作一个视频播放器
查看>>
wxPython学习1--创建最小的空的wxPython程序
查看>>