JAVA日志API对项目的重要性不言而喻,由于历史原因,由此产生了很多日志标准,在项目构建时常常会遇到历史遗留问题,或者框架冲突问题。
可以将日志系统的Jar包分为3个部分:
标准:JUL,Slf4j(用于统一具体实现框架所提供的接口)
实现:log4j,logback(具体实现)
桥接器:如slf4j-jcl-1.7.13.jar(将slf4j标准的代码兼容到jcl标准去,该类包用于解决历史遗留问题,让标准兼容)
在项目合并时,出现依赖冲突的原因:
1.使用以上标准来构建实现类时,如果项目中存在多个实现依赖,(由于在实现包的编写标准中,构建logger对象的核心类类名相同导致依赖冲突),所以需要在Maven中解决依赖冲突,只在项目中保留一个实现类。
2.在生成logger对象时,项目中存在未解决历史遗留问题而导入的桥接器包,然后同时包含(A标准兼容B标准,B标准兼容A标准)的Jar包,从而产生代码兼容处理阶段,日志标准重定向的死循环,导致日志系统的失效。(在Maven中排除多余的依赖打破循环即可解决)。