Log4j2 升级到2.17.1踩过的坑
目录
1. 如果你用的是spring boot2.x 怎么升级方便
2. Caused by: java.lang.NoSuchMethodError: com.lmax.disruptor.dsl.Disruptor
3. Log4j2 error- ERROR StatusLogger Unrecognized format specifier
版本
Library | Current | Upgraded |
Lo4j2 related jar | * | 2.17.1 |
1. 如果你用的是spring boot2.x 怎么升级方便
在pom.xml里加log4j2.version属性, 覆盖掉spring-boot-starter-parent的指定版本。
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.2</version><relativePath/> <!-- lookup parent from repository --></parent><properties> <log4j2.version>2.17.1</log4j2.version>
</properties>
原因是:
spring-boot-dependendencies.pom里定义了 log4j2.version属性,利用它的值加的log4j2相关的包。
.... <groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.6.2</version><packaging>pom</packaging>
...<properties>
...<log4j2.version>2.17.0</log4j2.version><logback.version>1.2.9</logback.version><lombok.version>1.18.22</lombok.version><slf4j.version>1.7.32</slf4j.version>
...</properties><dependencies><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-bom</artifactId><version>${log4j2.version}</version><type>pom</type><scope>import</scope></dependency></dependencies>
在 log4j-bom.pom 里其实它把所有的log4j相关包都加了。所以在我们的项目你直接用就可以了。
<groupId>org.apache.logging.log4j</groupId><artifactId>log4j-bom</artifactId>
....<dependencyManagement><dependencies><!-- Log4j API --><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>${project.version}</version></dependency><!-- Core Log4j --><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>${project.version}</version></dependency>.....<!-- Legacy Log4j 1.2 API --><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-1.2-api</artifactId><version>${project.version}</version></dependency><!-- Commons Logging Compatibility API --><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-jcl</artifactId><version>${project.version}</version></dependency><!-- SLF4J Compatibility API --><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-slf4j-impl</artifactId><version>${project.version}</version></dependency><!-- SLF4J 1.8.x Compatibility API --><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-slf4j18-impl</artifactId><version>${project.version}</version></dependency><!-- SLF4J Adapter --><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-to-slf4j</artifactId><version>${project.version}</version></dependency><!-- Web Application Support --><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-web</artifactId><version>${project.version}</version></dependency><!-- java.util.logging adapter --><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-jul</artifactId><version>${project.version}</version></dependency>....</dependencies></dependencyManagement>
如果你不是很了解 <scope>import</scope>的含义,可以看看下面的介绍,讲的很清楚
Maven – Introduction to the Dependency Mechanism
2. Caused by: java.lang.NoSuchMethodError: com.lmax.disruptor.dsl.Disruptor
异常信息:
Caused by: java.lang.NoSuchMethodError: com.lmax.disruptor.dsl.Disruptor.<init>(Lcom/lmax/disruptor/EventFactory;ILjava/util/concurrent/ThreadFactory;Lcom/lmax/disruptor/dsl/ProducerType;Lcom/lmax/disruptor/WaitStrategy;)V
原因:
项目使用了log4j2,由于使用了全局异步打印日志的方式,还需要引入disruptor的依赖
<dependency><groupId>com.lmax</groupId><artifactId>disruptor</artifactId><version>3.2.0</version>
</dependency>
log4j2.xml
<Loggers><AsyncRoot level="INFO" includeLocation="true"><AppenderRef ref="stdout" /><AppenderRef ref="file" /></AsyncRoot></Loggers>
解决方法:
升级Disruptor 到3.4.0 版本
<dependency><groupId>com.lmax</groupId><artifactId>disruptor</artifactId><version>3.4.0</version>
</dependency>
3. Log4j2 error- ERROR StatusLogger Unrecognized format specifier
错误信息:
ERROR StatusLogger Unrecognized format specifier [d]
ERROR StatusLogger Unrecognized conversion specifier [d] starting at position 16 in conversion pattern.
ERROR StatusLogger Unrecognized format specifier [thread]
ERROR StatusLogger Unrecognized conversion specifier [thread] starting at position 25 in conversion pattern.
ERROR StatusLogger Unrecognized format specifier [level]
ERROR StatusLogger Unrecognized conversion specifier [level] starting at position 35 in conversion pattern.
ERROR StatusLogger Unrecognized format specifier [logger]
ERROR StatusLogger Unrecognized conversion specifier [logger] starting at position 47 in conversion pattern.
ERROR StatusLogger Unrecognized format specifier [msg]
ERROR StatusLogger Unrecognized conversion specifier [msg] starting at position 54 in conversion pattern.
ERROR StatusLogger Unrecognized format specifier [n]
ERROR StatusLogger Unrecognized conversion specifier [n] starting at position 56 in conversion pattern.
ERROR StatusLogger Reconfiguration failed: No configuration found for '135fbaa4' at 'null' in 'null'
相关代码- pom.xml
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId> <executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><finalName>your-component-name</finalName></configuration></execution></executions></plugin>
解决方法:
打包的时候去掉Log4j2Plugins.dat 文件。
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId> <executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><finalName>your-component-name</finalName><filters><filter><artifact>*:*</artifact><excludes><exclude>**/Log4j2Plugins.dat</exclude> </excludes></filter></filters></configuration></execution></executions></plugin>
Log4j2 升级到2.17.1踩过的坑相关推荐
- Spring boot升级到2.3.2.Release和Spring framework升级到5.28.Release踩过的坑
目录 1. 利用下面方法启动spring boot 项目是系统参数不生效 2. org.drools.template.parser.DecisionTableParseException: Fail ...
- Hibernate升级到5.4.18.final的过程踩过的坑
目录 1. 抛javax.persistence.TransactionRequiredException异常,在没有事务时 2. 执行save/insert/delete相关的DB操作后,没有生效也 ...
- linux ubuntu 17,Ubuntu 17.04(Zesty Zapus)已经结束支持,请升级到Ubuntu 17.10
截至今天,2018年1月13日,Ubuntu 17.04(Zesty Zapus)操作系统已经到达使用寿命,Canonical将不再为该系统版本提供任何安全和软件更新. Ubuntu 17.04(Ze ...
- Spring Cloud 升级最新 Finchley 版本,踩了所有的坑
转载自 Spring Cloud 升级最新 Finchley 版本,踩了所有的坑 Spring Boot 2.x 已经发布了很久,现在 Spring Cloud 也发布了 基于 Spring Bo ...
- centos升级glibc(升级到 2.17版)
1.原先的系统glibc库的版本是2.12,需要升级到2.17版本. 下载地址: http://ftp.gnu.org/gnu/glibc/ http://ftp.gnu.org/gnu/glibc/ ...
- 【JDK】win 10 / win 11:jdk 8 升级为 jdk 17
目录 一.前言 二.历史版本 Java 安装 三.最新版本 Java 安装 (1)历史版本作废 (2)最新版本沿用旧版 JDK 系统环境变量 (3)JDK 17 下载 (4)JDK 17 安装 (5) ...
- Redis 集群部署及踩过的坑
本文目标 要在单台机器上搭建Redis集群,方式是通过不同的TCP端口启动多个实例,然后组成集群,同时记录在搭建过程中踩过的坑. 安装准备 centos版本:6.7 redis版本:3.2.3 安装方 ...
- arcgis python 二次开发_我在部署ArcGIS API for Python时踩到的坑
ArcGIS API for Python相比于其他ESRI产品,还是很年轻.我在部署时踩到了坑,网上也找不到解决方法,很是煞风景,也很打击学习的积极性. 今天回顾一下,做个总结吧.一方面自己备忘,另 ...
- vSAN一次人肉工程师踩过的坑
vSAN一次人肉工程师踩过的坑 原创 李严省 虚实之路 2017-04-16 大家星期天好,这几天阳光不错,是个带家人或者女朋友出去转转的好时候.可惜这二天一夜做了VMwarevSAN人肉工程师,这二 ...
最新文章
- 撤销操作 —— Git 学习笔记 12
- No plugin found for prefix ‘scala‘ pom.xml
- 【20181026T2】**图【最小瓶颈路+非旋Treap+启发式合并】
- 第一次使用mysql_第一次使用mysql,求帮忙
- 外卖平台用户端APP说明
- coreboot学习3:启动流程跟踪之bootblock阶段
- python删除某个文件夹_Python 实现删除某路径下文件及文件夹
- 蓝芯保护卡_有个网友问偶蓝芯卡是目前最好的还原卡?它与传统还原卡的区别在哪里?...
- 老李分享:HTTP session原理及应用 1
- Django Celerybeat日志报错处理('NoneType' object has no attribute 'is_due')
- Win7系统经常蓝屏故障处理过程及思路
- 模拟I2C怎么用--教你使用GPIO口模拟I2C总线协议
- 实时帧数手机_实时音频的混音在视频直播中的技术原理和实践总结
- pycharm前进、后退快捷键
- 防CC攻击 软件防火墙和WEB防火墙大比较
- PPPoE协议应用场景
- 软件技术部第一次机器学习培训
- Android studio 实现背景音乐(打开页面自动循环播放)
- Linux/Centos: 服务器TIME_WAIT和CLOSE_WAIT区别及解决方案
- ERP项目文档--想到用时方恨少