Apache Log4j 2升级到2.16.0最新版本的解决方案

1.漏洞描述

Apache Log4j2 是一款优秀的 Java 日志框架。阿里云安全团队向 Apache 官方报告了 Apache Log4j2 远程代码执行漏洞。由于 Apache Log4j2 某些功能存在递归解析功能,攻击者可直接构造恶意请求,触发远程代码执行漏洞。

由于 Log4j2 作为日志记录基础第三方库,被大量 Java 框架及应用使用,只要用到 Log4j2 进行日志输出且日志内容能被攻击者部分可控,即可能会受到漏洞攻击影响。因此,该漏洞也同时影响全球大量通用应用及组件,例如:

  • Apache Struts2
  • Apache Solr
  • Apache Druid
  • Apache Flink
  • Apache Flume
  • Apache Dubbo
  • Apache Kafka
  • Spring-boot-starter-log4j2
  • List item
  • ElasticSearch
  • Redis
  • Logstash
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/428bead3dca447a78e2510bda2196bff.png#pic_center

2.下面是升级log4J版本的思路和步骤

![在这里插入图片描述](https://img-blog.csdnimg.cn/c74417ccd21a46949daafff4e5a36c51.jpg#pic_center
因为新版本2.16.0的log4j2日志性能更好和安全性更高,所以我们采用新版本的日志打印来提高系统安全和性能,那么如何替换新版本的日志打印,下面是步骤:
步骤1:

修改log4j版本的依赖。
![在这里插入图片描述](https://img-blog.csdnimg.cn/8f741893c23b44e1bf7ed64d48bce43b.png#pic_center

<log4j.version>2.16.0</log4j.version>

pom中添加依赖:

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>${log4j.version}</version>
</depenency>

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>${log4j.version}</version>
</dependency>

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-web</artifactId>
    <version>${log4j.version}</version>
</dependency>

<dependency> <!-- 桥接:告诉Slf4j使用Log4j2 -->
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j-impl</artifactId>
    <version>${log4j.version}</version>
</dependency>

<dependency> <!-- 桥接:告诉commons logging使用Log4j2 -->
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-jcl</artifactId>
    <version>${log4j.version}</version>
</dependency>

为了方便后期升级可能替换为其他框架,所以我们采用slf4j框架的api来输入日志。所以需要添加对应的桥接依赖。

步骤2:
删除掉原有的log4j版本和logback日志依赖,如果系统中有的话。将系统中的API调用全部修改为根据slf4j的api来调用。


import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

private Logger logger = LoggerFactory.getLogger(Controller.class);

步骤3:
添加log4j2需要的配置文件,log4j2.xml,而且log4j2版本的日志不再支持properties的配置。

<?xml version="1.0" encoding="UTF-8"?>
<properties>

    <!-- 本地测试日志写路径-->

    <property name="LOG_HOME">/data/home/logs/***</property>

    <property name="FILE_NAME">XXXName</property>

</properties>

 <!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->

<Appenders>

    <Console name="Console" target="SYSTEM_OUT">

        <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} |-%-5level %logger{80} - %msg%n" />

        <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>

    </Console>

    <RollingFile name="info-rolling" fileName="${LOG_HOME}/${FILE_NAME}.log"

                 filePattern="${LOG_HOME}/${LOG_FILENAME}.%d{yyyy-MM-dd}.log"

                 immediateFlush="false">

        <PatternLayout

                pattern="%d{yyyy-MM-dd HH:mm:ss} |-%-5level %logger{80} - %msg%n"/>

        <Policies>

            <TimeBasedTriggeringPolicy interval="24" modulate="true"/>

        </Policies>

        <Filters>

            <ThresholdFilter level="info" onMatch="ACCEPT"

                             onMismatch="DENY" />
        </Filters>

        <DefaultRolloverStrategy max="15" />

    </RollingFile>

    <RollingFile name="error-rolling" fileName="${LOG_HOME}/${FILE_NAME}.err"

                 filePattern="${LOG_HOME}/${LOG_FILENAME}-%d{yyyy-MM-dd}.err"

                 immediateFlush="false">

        <PatternLayout

                pattern="%d{yyyy-MM-dd HH:mm:ss} |-%-5level %logger{80} - %msg%n"/>

        <Policies>

            <TimeBasedTriggeringPolicy interval="24" modulate="true"/>

        </Policies>

        <Filters>

            <ThresholdFilter level="warn" onMatch="ACCEPT"

                             onMismatch="DENY" />

        </Filters>

        <DefaultRolloverStrategy max="15" />

    </RollingFile>

</Appenders>

<Loggers>

    <!-- <Logger name="com.cssweb.test.app" level="trace" additivity="true">

        <AppenderRef ref="running-log" /> </Logger> -->

    <logger name="org.springframework" level="INFO"></logger>

    <logger name="org.mybatis" level="INFO"></logger>

    <Root level="all">

        <!-- 这里是输入到控制台-->

        <AppenderRef ref="Console" />

        <!-- 这里是输入到文件,很重要-->

        <AppenderRef ref="info-rolling" />



        <AppenderRef ref="error-rolling" />

    </Root>

</Loggers>

步骤4:

   前面三步完成的话,其实可以启动试试,但是通常情况下不会成功,
   因为项目里面还有其他的组件依赖有使用到低版本的日志依赖。会导致我们新版本的日志不起作用

在这里插入图片描述

步骤5:
去掉低版本的日志依赖
打开maven工具栏,选中其中需要编译的项目,然后点击show Dependencies然后可以看到整体依赖图哦!
在这里插入图片描述
再点击Exclude去掉低版本依赖哦!
在这里插入图片描述

这里需要一个个去掉低版本的日志依懒即可!
完结…亲测有用,看到这里麻烦点个赞哦!-------------------------------------------------------------------------------------------------

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
apache-log4j-1.2.15.jar, apache-log4j-extras-1.0.jar, apache-log4j-extras-1.1.jar, apache-log4j.jar, log4j-1.2-api-2.0.2-javadoc.jar, log4j-1.2-api-2.0.2-sources.jar, log4j-1.2-api-2.0.2.jar, log4j-1.2.11.jar, log4j-1.2.12.jar, log4j-1.2.13-sources.jar, log4j-1.2.13.jar, log4j-1.2.13.src.jar, log4j-1.2.14-sources.jar, log4j-1.2.14.jar, log4j-1.2.15-sources.jar, log4j-1.2.15.jar, log4j-1.2.16-sources.jar, log4j-1.2.16.jar, log4j-1.2.5.jar, log4j-1.2.6.jar, log4j-1.2.7.jar, log4j-1.2.8.jar, log4j-1.2.9.jar, log4j-1.2.91.jar, log4j-1.2.jar, log4j-1.2rc1.jar, log4j-1.3alpha-7.jar, log4j-api-2.0.2-javadoc.jar, log4j-api-2.0.2-sources.jar, log4j-api-2.0.2.jar, log4j-boot.jar, log4j-bridge-0.9-sources.jar, log4j-bridge-0.9-tests.jar, log4j-bridge-0.9.4-sources.jar, log4j-bridge-0.9.4-tests.jar, log4j-bridge-0.9.4.jar, log4j-bridge-0.9.6-sources.jar, log4j-bridge-0.9.6-tests.jar, log4j-bridge-0.9.6.jar, log4j-bridge-0.9.jar, log4j-config.jar, log4j-core-2.0.2-javadoc.jar, log4j-core-2.0.2-sources.jar, log4j-core-2.0.2-tests.jar, log4j-core-2.0.2.jar, log4j-core.jar, log4j-ext.jar, log4j-flume-ng-2.0.2-javadoc.jar, log4j-flume-ng-2.0.2-sources.jar, log4j-flume-ng-2.0.2.jar, log4j-java1.1.jar, log4j-jcl-2.0.2-javadoc.jar, log4j-jcl-2.0.2-sources.jar, log4j-jcl-2.0.2.jar, log4j-jmx-gui-2.0.2-javadoc.jar, log4j-jmx-gui-2.0.2-sources.jar, log4j-jmx-gui-2.0.2.jar, log4j-nosql-2.0.2-javadoc.jar, log4j-nosql-2.0.2-sources.jar, log4j-nosql-2.0.2.jar, log4j-over-slf4j-1.5.0.jar, log4j-over-slf4j-1.5.10.jar, log4j-over-slf4j-1.5.3.jar, log4j-over-slf4j-1.5.5.jar, log4j-over-slf4j-1.5.6-sources.jar, log4j-over-slf4j-1.5.6.jar, log4j-over-slf4j-1.5.8-sources.jar, log4j-over-slf4j-1.5.8.jar, log4j-over-slf4j-1.6.1.jar, log4j-slf4j-impl-2.0.2-javadoc.jar, log4j-slf4j-impl-2.0.2-sources.jar, log4j-slf4j-impl-2.0.2.jar, log4j-snmp-appender.jar, log4j-taglib-2.0.2-javadoc.jar, log4j-taglib-2.0.2-sources.jar, log4j-taglib-2.0.2.jar, log4j-to-slf4j-2.0.2-javadoc.jar, log4j-to-slf4j-2.0.2-sources.jar, log4j-to-slf4j-2.0.2.jar, log4j-web-2.0.2-javadoc.jar, log4j-web-2.0.2-sources.jar, log4j-web-2.0.2.jar, log4j-wjw.jar, log4j-xml-1.3alpha-7.jar, log4j.jar, org.apache.log4j_1.2.15.v201005080500.jar, org.apache.log4j_1.2.15.v201012070815.jar

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值