log4j升级到log4j2 spring

目录

基础知识

日志系统对应的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不支持高并发,有让服务变慢的风险(本文可能不是升级的最优解,欢迎大家指出交流)

基础知识

log4j升级到log4j2 spring_第1张图片

日志框架组成,日志在项目中的组合有很多种方式,例如slf4j+log4j log4j+log4j2 等等,一般来说会使用桥接去转换为某一个框架上,找好对应要升级的包和需要去掉的包

日志系统对应的jar包和推荐依赖

详细的日志框架桥接逻辑可见下文博文所描述

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

pom.xml

已在上线项目使用的版本推荐


        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);

log4j2的配置文件

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
                
            
        
       

log4j2异步日志包缺失时报错

引入以下依赖


	com.lmax
	disruptor
	3.4.2

mybatis-spring 从1.0.1 升级到 1.3.2 mybatis 3.0.6 -> 3.4.6问题

 因为其他依赖包的原因,需升级mybatis,对应的的mybaits-spring版本也要升级

升级mybaits-spring到1.3.2过后遇到的问题

Cannot load JDBC driver class '${jdbc.mysql.driverClassName}',继承mybatis,读取属性配置文件失败。_恶善的博客-CSDN博客

java方法名中画了一条横线 - 简书

升级了,log4j2.xml和log4j2.properties却没有生效

本人是由于activemq-all这个包导致的,详细推导逻辑见下博文

在Tomcat的VM参数里添加-Dlog4j.debug参数来显示log4j的有关信息

解决log4j2配置文件失效的问题_汇编语言不会编的博客-CSDN博客_log4j2配置文件不生效

要排除一些框架内置日志包导致的冲突,例如:

以zookeeper和kafka为例,删除lib目录下的这三个jar包:slf4j-log4j12、slf4j-api和log4

项目中用到的MDC也需要升级

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下载

你可能感兴趣的:(Java基础,log4j,spring,mybatis)