目录

基础知识

日志系统对应的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 等等,一般来说会使用桥接去转换为某一个框架上,找好对应要升级的包和需要去掉的包

日志系统对应的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.jarlog4j-api-2.x.x.jarlog4j-core-2.x.x.jar

2.slf4j->log4j2

将slf4j日志,采用log4j2实现进行输出,需要如下jar包

slf4j-api-x.x.x.jarlog4j-slf4j-impl-x.x.x.jarlog4j-api-x.x.x.jarlog4j-core-x.x.x.jar

pom.xml

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

<properties><slf4j.version>1.7.6</slf4j.version><log4j.version>2.17.1</log4j.version><disruptor.version>3.3.4</disruptor.version>
</properties>
<dependencies><!-- log4j2 start --><!-- log4j-1.2-api必须放在最前面,否则出错 这是log4j2 兼容1 的api 升级必备 可以平滑不改代码升级 --><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-1.2-api</artifactId><version>${log4j.version}</version></dependency><!-- Listener和Filter相关的配置在Servlet 3.0以上(也就是tomcat7.0以上) 被log4j-web.jar“自动”的初始化了--><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-web</artifactId><version>${log4j.version}</version></dependency><!-- log4j2的核心包--><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>${log4j.version}</version></dependency><!-- log4j2的api接口包--><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>${log4j.version}</version></dependency><!-- slf4j对应log4j2日志框架的驱动包--><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-slf4j-impl</artifactId><version>${log4j.version}</version></dependency><!-- slf4j的接口包 --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${slf4j.version}</version></dependency><!--     <dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency>   --><!-- log4j2的异步日志功能包 --><dependency><groupId>com.lmax</groupId><artifactId>disruptor</artifactId><version>${disruptor.version}</version></dependency>

代码可能要修改的地方

如果原项目有引用的桥接包,一般来说可以不动代码,但如果更换依赖过程中报错了,建议更改为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中引用父工程的包,再用<scope>来实现打包中不使用

方案来源 maven巧妙排除父pom的依赖_高粱的博客-CSDN博客_maven排除父类依赖

 <!-- 剔除父工程包,scope 为test不参与打包 --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.12</version><scope>test</scope></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version><scope>test</scope></dependency>

什么是scope

Maven依赖中的scope详解_kimy的博客-CSDN博客_maven scope

用<exclusion>去排除它,(不是本人的解决方案)看上去可信度比较高存一下

https://www.csdn.net/tags/MtTaAg4sMDA3MjU1LWJsb2cO0O0O.html

如果项目的pom和<parent>有相同的<groupId> <artifactId>的话 会使用子项目的版本

        <dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.12</version><exclusions><exclusion><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId></exclusion></exclusions></dependency>

log4j2异步日志包缺失时报错

引入以下依赖

<dependency><groupId>com.lmax</groupId><artifactId>disruptor</artifactId><version>3.4.2</version>
</dependency>

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

log4j升级到log4j2 spring相关推荐

  1. log4j升级为log4j2(无需改动代码)

    log4j升级为log4j2(无需改动代码) 1 .删掉项目中存在的Log4j1.x的jar包,添加log4j2的jar包; 2.添加log4j和log4j2的连接包log4j-1.2-api-2.x ...

  2. linux上设置了log4j没有产生日志文件_关于 log4j 升级到 log4j2 的小结

    关于升级 jar 包等前提要求 删掉原先的 log4j-1.XX 等 jar 包 从 1.XX 升级到 2.XX 平稳升级需要的 jar 包,其中包括用 sl4j-1.7.25 (1.7.21 暂时也 ...

  3. log4j升级为log4j2(不需要改动代码)

    公司的项目决定升级log4j,因为log4j2有一个自动删除日志的功能,这样可以减轻运维的一些工作,而且在多线程环境下,log4j2的异步日志系统比log4j和logback提高了十倍的性能(吞吐量和 ...

  4. 升级到log4j2之后在idea控制台输出日志中文乱码的解决方案

    log4j升级到log4j2之后在idea编辑器的控制台输出日志中文乱码 问题概述: 项目组最近升级了日志系统,由log4j升级到了log4j2,在调试的过程中发现我用的idea编辑器的控制台输出中文 ...

  5. log4j平稳升级到log4j2

    一.前言 公司中的项目虽然已经用了很多的新技术了,但是日志的底层框架还是log4j,个人还是不喜欢用这个的.最近项目再生产环境上由于log4j引起了一场血案,于是决定升级到log4j2. 二.现象 虽 ...

  6. git log 迁移_现场故事:从Log4J迁移到Log4J2

    git log 迁移 通过从您的应用程序学习企业APM产品,发现更快,更有效的性能监控. 参加AppDynamics APM导览! 与许多Java应用程序一样,AppDynamics Java代理广泛 ...

  7. 现场故事:从Log4J迁移到Log4J2

    通过从应用程序中学习企业APM产品,发现更快,更高效的性能监控. 参加AppDynamics APM导览! 与许多Java应用程序一样,AppDynamics Java代理广泛使用日志记录. 多年来, ...

  8. log4j升级到logback

    虽然现在log4j已经基本上不更新很久了,但实际上升级log4j到logback最大的难度并不在于本身的替换,而是现有大量的三方jar依然使用log4j,以至于无法100%的exclude掉,所以很有 ...

  9. spring、springboot集成 log4j日志、log4j2日志以及slf4j

    1.查看pringboot自带的日志框架 新建一个springboot 工程,查看依赖树 通过查看依赖树可以发现,springboot自带被loggong管理的log4j .logback等日志相关的 ...

最新文章

  1. 老司机带你学爬虫——Python爬虫技术分享
  2. SQLALchemy 从数据库导出model
  3. sccm终于把用户装软件的问题解决了
  4. USB接口类型的区别
  5. [转载] python下求语数总分和平均值_R和python语言如何求平均值,中位数和众数
  6. jabberd2分析
  7. Qt调用谷歌翻译API
  8. 嵌入式系统安全实验-下载Linux内核源代码生成内核映像
  9. 报错java.lang.NoClassDefFoundError: org/jaxen/JaxenException
  10. [opencv]学习之帧差法实现运动物体检测
  11. 计算机网络-名词解释整理
  12. 简述JVM垃圾回收机制
  13. 以下不是python3保留字的是_python 保留字
  14. 价值7k美刀的Flickr网站漏洞是怎么样的?
  15. Spring Data 数据库建模最佳实践
  16. 阿里巴巴绩效管理理念和原则
  17. 互联网IT行业岗位分析,程序员、CTO……都是什么?
  18. vivo X9i的Usb调试模式在哪里,开启vivo X9iUsb调试模式的方法
  19. matlab solve函数错误【检查对函数 ‘solve‘ 的调用中是否缺失参数或参数数据类型不正确】
  20. linux img文件 分区挂载

热门文章

  1. c++ 一个多线程log的实现
  2. 事件循环机制 (Event Loop)
  3. RedHadoop创始人童小军在北京开讲“Hadoop2.0集群优化与管理”啦!
  4. iOS各种调试技巧豪华套餐
  5. java ssm校园二手书交易平台idea
  6. win10 VS2017 安装OpenSSL1.1.1
  7. 2019国内知名桌面云厂家排名
  8. 完全 彻底 删除 百度云管家
  9. mysql+免费下载_mysql的下载地址+Download WinMD5
  10. 【建议】个人竞争力≠个人竞争力模型