目录
基础知识
日志系统对应的jar包和推荐依赖
pom.xml
代码可能要修改的地方
log4j2的配置文件
个人问题杂记
去掉父工程的依赖
log4j2异步日志包缺失时报错
mybatis-spring 从1.0.1 升级到 1.3.2 mybatis 3.0.6 -> 3.4.6问题
升级了,log4j2.xml和log4j2.properties却没有生效
项目中用到的MDC也需要升级
为什么要升级,因为log4j不支持高并发,有让服务变慢的风险(本文可能不是升级的最优解,欢迎大家指出交流)
日志框架组成,日志在项目中的组合有很多种方式,例如slf4j+log4j log4j+log4j2 等等,一般来说会使用桥接去转换为某一个框架上,找好对应要升级的包和需要去掉的包
详细的日志框架桥接逻辑可见下文博文所描述
https://www.jianshu.com/p/d7b0e981868d
这里直接说结论,利用桥接包,将项目日志用log4j2实现进行输出(出于配置方便的角度考虑,原项目有使用log4j和slf4j)
1.log4j->log4j2
去掉 log4j 1.x jar,添加log4j-1.2-api.jar,配合 log4j-api-2.x.x.jar 和 log4j-core-2.x.x.jar 即可,依赖如下
log4j-1.2-api-2.x.x.jar
log4j-api-2.x.x.jar
log4j-core-2.x.x.jar
2.slf4j->log4j2
将slf4j日志,采用log4j2实现进行输出,需要如下jar包
slf4j-api-x.x.x.jar
log4j-slf4j-impl-x.x.x.jar
log4j-api-x.x.x.jar
log4j-core-x.x.x.jar
已在上线项目使用的版本推荐
1.7.6
2.17.1
3.3.4
org.apache.logging.log4j
log4j-1.2-api
${log4j.version}
org.apache.logging.log4j
log4j-web
${log4j.version}
org.apache.logging.log4j
log4j-core
${log4j.version}
org.apache.logging.log4j
log4j-api
${log4j.version}
org.apache.logging.log4j
log4j-slf4j-impl
${log4j.version}
org.slf4j
slf4j-api
${slf4j.version}
com.lmax
disruptor
${disruptor.version}
如果原项目有引用的桥接包,一般来说可以不动代码,但如果更换依赖过程中报错了,建议更改为log4j2的实例
//Log4j实例:
import org.apache.log4j.Logger;
private static final Logger LOGGER = Logger.getLogger(X.class);
//Slf4j实例:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static final Logger logger = LoggerFactory.getLogger(X.class);
//Log4j2实例:
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
private static final Logger logger = LogManager.getLogger(X.class);
spring项目,配置文件推荐使用log4j2.xml 因为低版本log4j2中不支持 log4j2.properties文件(log4j2有默认配置,即使没有配置文件依然不会报错)
配置文件 on the classpath 即可实现(也就是放在resources下),可以不在web.xml再配置监听
log4j2.xml完美配置_清风雪的技术博客_51CTO博客
记一下自己项目中因为还要兼容一些其他框,在升级过程中遇到的问题
结论:在pom.xml中引用父工程的包,再用
方案来源 maven巧妙排除父pom的依赖_高粱的博客-CSDN博客_maven排除父类依赖
org.slf4j
slf4j-log4j12
1.7.12
test
log4j
log4j
1.2.17
test
什么是scope
Maven依赖中的scope详解_kimy的博客-CSDN博客_maven scope
用
https://www.csdn.net/tags/MtTaAg4sMDA3MjU1LWJsb2cO0O0O.html
如果项目的pom和
org.slf4j
slf4j-log4j12
1.7.12
org.slf4j
slf4j-log4j12
引入以下依赖
com.lmax
disruptor
3.4.2
因为其他依赖包的原因,需升级mybatis,对应的的mybaits-spring版本也要升级
升级mybaits-spring到1.3.2过后遇到的问题
Cannot load JDBC driver class '${jdbc.mysql.driverClassName}',继承mybatis,读取属性配置文件失败。_恶善的博客-CSDN博客
java方法名中画了一条横线 - 简书
本人是由于activemq-all这个包导致的,详细推导逻辑见下博文
在Tomcat的VM参数里添加
-Dlog4j.debug
参数来显示log4j的有关信息
解决log4j2配置文件失效的问题_汇编语言不会编的博客-CSDN博客_log4j2配置文件不生效
要排除一些框架内置日志包导致的冲突,例如:
以zookeeper和kafka为例,删除lib目录下的这三个jar包:slf4j-log4j12、slf4j-api和log4
log4j MDC NDC详解_星技传阅的技术博客_51CTO博客
借鉴博文
log4j升级到log4j2 - Windy心梦无痕 - 博客园
spring引入log4j2日志框架_逍遥壮士的博客-CSDN博客_spring使用log4j2
日志组件slf4j介绍及配置详解_cc-cf的博客-CSDN博客_slf4j配置
apche的log4j.properties和log4j2.xml的配置和使用_HopeOneToYou的博客-CSDN博客_log4j.properties下载