springboot log4j升级log4j2

前言

在多线程情况下,使用log4j可能会阻塞其他线程,从而导致整体性能下降并出现性能瓶颈。所以需要升级到性能更好并支持异步的log4j2。

升级步骤

1.更新maven pom依赖

  <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
            <version>3.0.3</version>
        </dependency>
        <dependency>
            <groupId>com.lmax</groupId>
            <artifactId>disruptor</artifactId>
            <version>3.4.2</version>
        </dependency>

2.更新代码

(1)替换import package

原来的包

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

更换为新包
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

(2)替换logger新接口

原来的日志类定义

private static final Logger LOGGER = LoggerFactory.getLogger(Atest.class);

private static final Logger LOGGER = LoggerFactory.getLogger("newFile");

更换为新日志类接口
private static final Logger LOGGER = LogManager.getLogger(Atest.class)

private static final Logger LOGGER = LogManager.getLogger("newFile");

3.在application.yml指定log4j2日志配置文件

logging:
  config: classpath:log4j2.xml

4.在src/main/resources下新增日志配置文件log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
    <Properties>
        <Property name="system.logPath">./log</Property>
    </Properties>

    <Appenders>
        <!-- console -->
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{ISO8601} %c{1} %p - %m%n"/>
        </Console>

        <!-- info日志文件 -->
        <RollingFile name="InfoFile" fileName="${sys:system.logPath}/info.log"
                     filePattern="${sys:system.logPath}/info-%d{yyyy-MM-dd}.log">
            <PatternLayout pattern="%d{ISO8601} %c{1} %p - %m%n"/>
            <Policies>
                <SizeBasedTriggeringPolicy size="100 MB"/>
            </Policies>
            <DefaultRolloverStrategy max="2"/>
        </RollingFile>

        <!-- newFile日志文件 -->
        <RollingFile name="NewFile" fileName="${sys:system.logPath}/NewFile.log"
                     filePattern="${sys:system.logPath}/NewFile-%d{yyyy-MM-dd}.log">
            <PatternLayout pattern="%d{MM-dd_HH:mm:ss} %m%n"/>
            <Policies>
                <SizeBasedTriggeringPolicy size="128 MB"/>
            </Policies>
            <DefaultRolloverStrategy max="2"/>
        </RollingFile>

    </Appenders>

    <Loggers>

        <!-- 设置特定路径的日志级别 -->
        <Logger name="org.apache.kafka" level="info"/>

        <!-- rootLogger定义 -->
        <Root level="INFO">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="InfoFile"/>
        </Root>

        <!-- newFile日志专用logger -->
        <Logger name="newFile" level="INFO" additivity="true">
            <AppenderRef ref="NewFile"/>
        </Logger>
    
    </Loggers>
</Configuration>

5.在src/main/resources下新增日志配置文件log4j2.component.properties,启动异步配置

log4j2.contextSelector=org.apache.logging.log4j.core.async.BasicAsyncLoggerContextSelector

测试log4j2异步配置是否生效

参考:测试springboot log4j2异步配置是否生效_Mint6的博客-CSDN博客

### 回答1: Spring Boot Log4j2漏洞修复指的是修复Spring Boot应用程序中使用的Log4j2库中存在的漏洞。这些漏洞可能会导致攻击者利用恶意代码来执行远程命令或者进行其他恶意行为。为了修复这些漏洞,开发人员需要升级Log4j2库到最新版本,并且配置Log4j2以避免受到攻击。此外,还需要对应用程序进行安全审计,以确保没有其他漏洞存在。 ### 回答2: 在修复Spring Boot Log4j2漏洞之前,我们需要了解该漏洞是什么以及它的影响。Spring Boot Log4j2漏洞是一种远程代码执行漏洞,可能允许攻击者在目标系统上执行恶意代码。该漏洞存在于Spring Boot应用程序中使用的Log4j2库中,该库允许攻击者通过发送恶意请求来触发漏洞并执行代码。攻击者可以利用此漏洞从远程地方执行任意代码,包括在目标系统上上传和执行恶意软件、访问受保护的数据等。 为修复Spring Boot Log4j2漏洞,需要按照以下步骤进行操作: 1. 升级Log4j2版本:如果您使用的是Spring Boot 2.1.x,则需要将该应用程序升级Spring Boot 2.1.24及更高版本,该版本已解决漏洞。如果您使用的是Spring Boot 2.2.x或更运行的版本,则需要升级Spring Boot 2.2.18及更高版本。通过此操作,可以更新您的应用程序中使用的Log4j2库,从而修复漏洞。 2. 禁用Log4j2:如果您无法升级到最新版本或不想升级,则可以禁用Log4j2。您可以在应用程序的配置文件中进行相应的更改。如果您使用的是Spring Boot 1.x版本,则可以禁用日志记录,然后将应用程序转换为使用Logback或其他日志库。如果您使用的是Spring Boot 2.x版本,则可以使用spring-boot-starter-logging库中的其他日志记录器。 3. 更新应用程序代码:如果您无法升级版本或禁用Log4j2,则需要在应用程序代码中进行更改,以减轻漏洞的影响。建议使用最新的Java安全管理器,并在代码中使用安全方案,以确保应用程序在支持的特权下运行。 修复Spring Boot Log4j2漏洞对于保障应用程序的安全至关重要。我们建议应用程序开发者及时采取相应的措施,确保应用程序不会受到任何风险的威胁。同时,我们还建议应用程序在运行期间定期检查和更新库,以保持最新的安全补丁。 ### 回答3: Spring Boot是目前Java应用开发领域里非常流行的一种轻量级框架。而Log4j2是一款常用的Java日志框架,可以帮助Java程序员更好地管理应用的日志。但是,近来Log4j2存在着一个被多个漏洞编号CVE-2021-44228所包含的严重漏洞,存在导致系统被攻击的危险。本文将介绍这个漏洞及其修复方法。 漏洞概述: 由于Log4j2中的JNDI注入漏洞,攻击者可以通过web请求中的恶意JNDI名称从远程服务器上下载jar包,导致恶意攻击。这个漏洞主要存在于如下代码中。 { <PatternLayout pattern="%highlight{%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5p] [%t] %c{1.} - %m%n%ex}{WARN=Bright Yellow,ERROR=Bright Red,FATAL=Bright Red}" /> } 漏洞修复方法: 1.升级log4j2到最新版本:由于Log4j2官方已发布最新的2.17.0版本,此版本已修复该漏洞,用户可以升级到此版本以避免漏洞带来的安全隐患。 2.移除JMS Appender配置:如果升级日志框架不现实,可以选择移除JMS Appender配置以避免被攻击风险,具体实现方法如下: (1)移除log4j2.xml或log4j2.properties文件中的JMS Appender配置。 (2)升级log4j-web相关的jar包,升级到2.17.0及以上版本。 总结: 如果您的应用程序使用的是Log4j2版本低于2.17.0的版本,则应尽快升级到该版本并修改配置文件,如果不能升级到该版本,则需要尽快移除JMS Appender配置以及升级相关的jar包版本,以避免被漏洞攻击所影响。我们还建议应用程序部署人员定期检测该漏洞,以保证应用的安全运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值