目录

问题

解决方法

原因分析


问题

使用maven-shade-plugin或者maven-assembly-plugin插件把项目打成一个可执行JAR包时,如果你引入了log4j2会出现如下问题

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.

解决方法

pom中添加如下配置。

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>2.4.3</version><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><filters><filter><artifact>*:*</artifact><excludes><exclude>META-INF/*.SF</exclude><exclude>META-INF/*.DSA</exclude><exclude>META-INF/*.RSA</exclude></excludes></filter></filters><finalName>${artifactId}-${env}-${version}</finalName><transformers><transformerimplementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"><mainClass>xxx.yyyy.zzz.Main</mainClass></transformer><transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"><resource>META-INF/spring.handlers</resource></transformer><transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"><resource>META-INF/spring.schemas</resource></transformer><transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"><resource>META-INF/spring.tooling</resource></transformer><transformerimplementation="org.apache.maven.plugins.shade.resource.ComponentsXmlResourceTransformer"/><transformerimplementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/><transformer implementation="com.github.edwgiz.mavenShadePlugin.log4j2CacheTransformer.PluginsCacheFileTransformer" /></transformers></configuration></execution></executions><dependencies><dependency><groupId>com.github.edwgiz</groupId><artifactId>maven-shade-plugin.log4j2-cachefile-transformer</artifactId><version>2.6.1</version></dependency></dependencies>
</plugin>

原因分析

log4j2 是采用的插件式编程,当log4j2包编译时,或者含有log4j2插件的包编译时,会将需要加载的插件信息放在META-INF/org/apache/logging/log4j/core/config/plugins/Log4j2Plugins.dat这个文件中(包括官方logj42的原生插件),然后项目启动的时候,log4j2会在各个jar包的META-INF目录下扫描这个插件信息文件,然后去加载插件。

但是当项目被打成一个jar包时,如果两个不同的jar包中都有Log4j2Plugins.dat 这个文件,就会出现问题,其中一个文件会被另一个覆盖,导致项目启动的时候有一个文件中的插件不能被正常加载,导致报错。

解决这个问题就是当所有jar包被打成一个jar包时,需要对各个jar包中的Log4j2Plugins.dat进行合并,这就是maven-shade-plugin.log4j2-cachefile-transformer这个包所做的事情了。

Log4j2报错ERROR StatusLogger Unrecognized format specifier相关推荐

  1. 关于报错ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging

    在进行单元测试的时候,出现log4j报错ERROR StatusLogger No log4j2 configuration file found. Using default configurati ...

  2. Hadoop启动NameNode报错ERROR Cannot set priority of namenode process 2639

    项目场景: Hadoop启动NameNode报错::ERROR: Cannot set priority of namenode process 问题描述: Hadoop启动NameNode报错ERR ...

  3. Flex报错Error #2048: 安全沙箱冲突

    Flex+JPA架构,JPA程序迁移,从A服务器到B.其他一切没变,唯一变的就是IP. 前端Flex也就是swf报错Error #2048: 安全沙箱冲突:http://xxx.swf 不能从 xxx ...

  4. git:Git fetch和git pull的区别, 解决Git报错:error: You have not concluded your merge (MERGE_HEAD exists)....

    Git fetch和git pull的区别, 解决Git报错:error: You have not concluded your merge (MERGE_HEAD exists). 解决办法一:保 ...

  5. SAP MM MB21创建预留单据报错- Error during conversion to alternative units of measure -

    SAP MM MB21创建预留单据报错- Error during conversion to alternative units of measure - 某日下午收到业务部门报错,说是创建预留单保 ...

  6. QQ第三方登录报错error=-1

    qq 第三方登录报错error=-1 再次实例化qc类.

  7. mysql source导入报错ERROR 1366的解决方法

    mysql source导入报错ERROR 1366的解决方法 参考文章: (1)mysql source导入报错ERROR 1366的解决方法 (2)https://www.cnblogs.com/ ...

  8. 启动springboot报错Error creating bean with name 'dataSource' defined in class path resource

    2019独角兽企业重金招聘Python工程师标准>>> 启动springboot报错Error creating bean with name 'dataSource' define ...

  9. wince6.0 编译报错:error C2220: warning treated as error - no 'object' file generated的解决办法

    内容提要:wince6.0编译报错:"error C2220: warning treated as error - no 'object' file generated" 原因是 ...

最新文章

  1. react antd form 表单清空
  2. JavaScript新知:sessionStorage and localStorage
  3. Shell脚本:向磁盘中批量写入数据
  4. Cpp 11 / 万能引用、引用折叠和完美转发
  5. vs2015 html预览,Blend for Visual Studio 2015 预览版
  6. cdq分治(bzoj 1176: [Balkan2007]Mokia bzoj 2683: 简单题)
  7. 自动化运维工具(ansible入门教程)
  8. 命名实体识别研究综述
  9. html制作频谱,HTML5 WebAudioAPI(三)--绘制频谱图
  10. 2018 06 01 第一次博客 自然语言处理
  11. Photoshop技能167个经典的Photoshop技巧大全
  12. QQ空间说说刷赞网页版开放公测
  13. 游戏程序常规设计模式
  14. 头条学院-新媒体训练营第10期 | 10.23笔记(新媒体:一代人的机遇)
  15. 爱科赛博冲刺科创板:拟募资3.8亿 陕西集成电路与达晨是股东
  16. POCO C++ 在IOS上的使用
  17. 预防域名dns劫持和解决
  18. 基于美团Leaf-Segment的双buffer方案实现序列号生成器
  19. 网络计算机自动巡检,奇辉巡检机器人 公安巡检机器人 自动巡检报警 安防监控报警...
  20. org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.my.mapper.UserM

热门文章

  1. 【毕业设计】flink大数据淘宝用户行为数据实时分析与可视化
  2. maven、gradle 设置MANIFEST.MF配置
  3. Educoder/头歌JAVA实训——JAVA面向对象:类与对象
  4. 音响的灵魂! 世界顶级扬声器品牌介绍
  5. 【Unity】Unity 基本介绍
  6. 【Git\GitHub\GitLab学习笔记】版本控制 Git 视频教程全集(62P)| 6 小时从入门到精通(P27-P41)
  7. mybatis plus 代码生成器
  8. 华为云Web应用防火墙 ——为网络安全打通“第一公里”
  9. 《控制论导论》读书:变异度-度量变异度
  10. 动作捕捉,系数转换,IK 等整理总结