log4j升级log4j2遇到的问题及解决方式

 更新时间:2021年12月24日 10:21:36   作者:三千炼心  
这篇文章主要介绍了log4j升级log4j2遇到的问题及解决方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

log4j升级log4j2的问题

一、导入包

 <!-- log -->
<dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>${slf4j.version}</version>
</dependency>
<dependency>
     <groupId>org.slf4j</groupId>
     <artifactId>jcl-over-slf4j</artifactId>
     <version>${slf4j.version}</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.8.2</version>
</dependency>
        <!-- 日志桥接包, 适配log4j2 -->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j-impl</artifactId>
    <version>2.8.2</version>
</dependency>

注意:可能有些包需要依赖log4j,但是升级后只有log4j2了,此时会报找不到类的错,如:

Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger

那么如果这些包没有使用slf4接口,而是写死了必须依赖log4j的话,如果实在不想导入log4j的包,那么只能找能代替这个包的工具包使用了

如:

<!-- 使用该报去掉log4j,后会报上述错误,所以就把这个包换了 -->
<dependency>
 <groupId>com.github.sgroschupf</groupId>
 <artifactId>zkclient</artifactId>
 <version>0.1</version>
 <exclusions>
  <exclusion>
   <artifactId>log4j</artifactId>
   <groupId>log4j</groupId>
  </exclusion>
 </exclusions>
</dependency>

替换为如下的包,就可以了:

<dependency>
 <groupId>com.101tec</groupId>
 <artifactId>zkclient</artifactId>
 <version>0.10</version>
 <exclusions>
  <exclusion>
   <artifactId>log4j</artifactId>
   <groupId>log4j</groupId>
  </exclusion>
  <exclusion>
   <artifactId>slf4j-log4j12</artifactId>
   <groupId>org.slf4j</groupId>
  </exclusion>
 </exclusions>
 </dependency>

二、在src/main/resources下新建一个log4j2.xml文件

配置如下

<?xml version="1.0" encoding="UTF-8" ?>
<configuration status="ERROR">
 <Properties>
        <Property name="PATTERN" value="[%d{HH:mm:ss.SSS} %-5level] [%t] %c{3} - %msg%n" />
     <property name="FILE_PATH" value="/mySoft/logs" />
     <property name="FILE_SIZE" value="50 MB" />
    </Properties>
 <Appenders>
<!-- 控制台日志打印 -->
  <Console name="Console" target="SYSTEM_OUT">
   <PatternLayout pattern="${PATTERN}"/>
  </Console>
  <!-- 生产环境日志打印 -->
<!-- fileName表示创建的日志文件名,filePattern表示如果日志策略按照日期与大小做限定的话,如果大小超过50m就会按该格式将之前的的日志文件重命名,并重新创建新的fileName。同理,如果日期超过限定的时间,也会进行同样的操作,下文定义一天建一个,如果想一分钟建一个则filePattern="${FILE_PATH}/demo-%d{yyyy-MM-dd HH-mm}-%i.log" 如此定义-->
  <RollingFile name="ProdFile" 
   fileName="${FILE_PATH}/demo.log"
   filePattern="${FILE_PATH}/demo-%d{yyyy-MM-dd}-%i.log">
   <PatternLayout pattern="${PATTERN}" />
   <Policies>
          <TimeBasedTriggeringPolicy />
          <SizeBasedTriggeringPolicy size="${FILE_SIZE}"/>
      </Policies>
   <Filters>
             <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY" />
         </Filters>
  </RollingFile>
 </Appenders>
 <!-- root部分定义了log4j2的默认输出级别和方式 -->
 <loggers>
  <root level="error">
   <appender-ref ref="Console" />
   <appender-ref ref="ProdFile" />
  </root>
 </loggers>
</configuration> 

升级log4j2遇到的那些坑

<slf4j.version>1.7.13</slf4j.version>
<log4j2.version>2.3</log4j2.version>
<disruptor.version>3.3.2</disruptor.version>
<spring.version>3.2.4.RELEASE</spring.version>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>${log4j2.version}</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>${log4j2.version}</version>
</dependency>
<dependency>
    <groupId>com.lmax</groupId>
    <artifactId>disruptor</artifactId>
    <version>${disruptor.version}</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>${slf4j.version}</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j-impl</artifactId>
    <version>${log4j2.version}</version>
</dependency>
<!--这块比较关键,Spring原生应用中需要用到commons-logging,需要把它exclude掉,另外引入jcl-over-slf4j-->
<!--你会发现jcl-over-slf4j 只是改写了commons-logging 去兼容Spring-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <exclusions>
        <exclusion>
            <artifactId>commons-logging</artifactId>
            <groupId>commons-logging</groupId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jcl-over-slf4j</artifactId>
    <version>${slf4j.version}</version>
    <scope>runtime</scope>
</dependency>
<!-- 如果代码中依赖的jar包用到了log4j1.2.X,当工程中将log4j1.2.X排除掉了之后,项目启动时会报错不成功的 -->
<!-- 把下面这个jar引入进来就OK了 -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>log4j-over-slf4j</artifactId>
    <version>${slf4j.version}</version>
</dependency>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 通过Spring Boot + Mybatis + Redis快速搭建现代化Web项目

    通过Spring Boot + Mybatis + Redis快速搭建现代化Web项目

    本篇文章介绍了如何通过Spring Boot、Mybatis以及Redis快速搭建一个现代化的Web项目,并且同时介绍了如何在Spring Boot下优雅地书写单元测试来保证我们的代码质量。具体内容详情大家通过本文学习下吧
    2017-12-12
  • Java中Math类常用方法代码详解

    Java中Math类常用方法代码详解

    本文是小编最新给大家整理的关于Java中Math类常用方法的知识,通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2017-07-07
  • 利用POI生成EXCEL文件的方法实例

    利用POI生成EXCEL文件的方法实例

    Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能,下面这篇文章主要给大家介绍了关于利用POI生成EXCEL文件的相关资料,需要的朋友可以参考下
    2018-07-07
  • java中用String.Join美化代码的实例讲解

    java中用String.Join美化代码的实例讲解

    在本篇文章里小编给大家整理的是一篇关于java中用String.Join美化代码的实例讲解内容,有需要的朋友们可以学习下。
    2020-12-12
  • SpringBoot单机限流的实现

    SpringBoot单机限流的实现

    在系统运维中, 有时候为了避免用户的恶意刷接口, 会加入一定规则的限流,本文主要介绍了SpringBoot单机限流的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-08-08
  • Java的Hello World详解

    Java的Hello World详解

    当我们学习一门编程语言的时候,我们都会先学如何输出Hello World!本文通过几个例子给大家介绍输出Hello World的代码,感兴趣的朋友一起看看吧
    2021-09-09
  • springboot2.x使用Jsoup防XSS攻击的实现

    springboot2.x使用Jsoup防XSS攻击的实现

    这篇文章主要介绍了springboot2.x使用Jsoup防XSS攻击的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • java控制台输出图书馆管理系统

    java控制台输出图书馆管理系统

    这篇文章主要为大家详细介绍了java控制台输出图书馆管理系统,只用java代码不用数据库和GUI等,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • mybatis-plus如何使用mapper的xml

    mybatis-plus如何使用mapper的xml

    这篇文章主要介绍了mybatis-plus如何使用mapper的xml问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • springboot启动前执行方法的四种方式总结

    springboot启动前执行方法的四种方式总结

    这篇文章主要给大家介绍了关于springboot启动前执行方法的四种方式,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-01-01

最新评论