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博客

猜你喜欢

转载自blog.csdn.net/Mint6/article/details/130660987