工程中将log4j平滑升级到log4j2(坎坷路但不是太坎坷)

将升级步骤一级升级过程中遇到的问题 整理记录

如题,log4j1 如何平滑升级到log4j2呢?  

原来使用

private static final org.apache.log4j.Logger logger1 = org.apache.log4j.Logger.getLogger(MainTest.class)方法获取到org.apache.log4j.Logger对象的 ,现在private static final org.apache.logging.log4j.Logger logger1 = org.apache.logging.log4j.LogManager.getLogger(MainTest.class) 方法获取到org.apache.logging.log4j.Logger  

下面开始

1 将工程中的原有依赖删除

        <!--log4j 日志文件 该maven时原有log4j依赖-->
        <!--<dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.14</version>
        </dependency>-->
        <!--slf4j 日志文件 该maven时原有slf4j依赖-->
        <!--<dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.5.8</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.5.0</version>
        </dependency>-->

2 添加log4j2 相关依赖

<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

  <project.build.jdkVersion>1.8</project.build.jdkVersion>
  <springversion>4.3.9.RELEASE</springversion>
  <!-- log4j 2.X版本之后的就是log4j2-->
  <log4j2-version>2.6.2</log4j2-version>
</properties>
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-api</artifactId>
  <version>${log4j2-version}</version>
</dependency>
<!-- 该包是 log4j 升级到 log4j2的必须包 使用该包 不需要修改以前的 Logger.getLogger()这种获取对象的方式 -->
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-1.2-api -->
<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-1.2-api</artifactId>
  <version>${log4j2-version}</version>
</dependency>
<!-- 该包是slf4j 升级到 log4j2的必须包 使用该包 其他依赖jar中依赖slf4j 不会报错 -->
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-slf4j-impl -->
<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-slf4j-impl</artifactId>
  <version>${log4j2-version}</version>
</dependency>


3将web中工程中web.xml中日志文件修改

<context-param>
   <param-name>log4jConfigLocation</param-name>
   <!--<param-value>classpath:log4j.properties</param-value>-->
   <param-value>classpath:log4j2.xml</param-value>
</context-param>

4可以启动工程 

如果不报错恭喜你 已经成功了  如果启动异常  请往下看








注意 在升级过程中会遇到 依赖包版本问题

异常如下

工程中将log4j平滑升级到log4j2(坎坷路但不是太坎坷)

或者另一种异常信息 其实都是版本冲突或者版本不匹配


工程中将log4j平滑升级到log4j2(坎坷路但不是太坎坷)

工程中将log4j平滑升级到log4j2(坎坷路但不是太坎坷)

都是slf4j 版本问题  在我的工程 中 就发现了  低版本的依赖包(是一个工程依赖包内部依赖的该jar包)

当工程中存在

<dependency>
    <groupId>org.apache.tiles</groupId>
    <artifactId>tiles-core</artifactId>
    <version>3.0.3</version>
</dependency>

这个jar包 就会有此问题  当然 也可能时其他的jar包问题  如何查看呢?

直说一种  亲测可以使用 其他的没有使用过 使用idea 工具

工程中将log4j平滑升级到log4j2(坎坷路但不是太坎坷)

在弹出的输入中 输入 mvn dependency:tree 然后等待 将数据Copy出来就可以查看了

然后在使用低版本slf4j依赖的 maven jar包中使用exclusions 如下方式 将该包中的slf4j依赖去除

<dependency>
    <groupId>org.apache.tiles</groupId>
    <artifactId>tiles-core</artifactId>
    <version>3.0.3</version>
    <exclusions>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
        </exclusion>
    </exclusions>
</dependency>
然后就可以使用了 将工程跑起来吧 仅个人见解 如有问题 欢迎指出