spring boot的log4j2异步日志配置

本文介绍了如何在Spring Boot中配置log4j2实现异步日志,包括启动位置设置、引入异步日志依赖以及日志配置文件的修改。同时,讨论了将Spring Boot默认的日志框架从logback切换到log4j2的过程。在logId实现部分,提到了在接收请求时添加logId的挑战,并表达了对多线程下相同logId实现的探讨需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、log4j2异步配置

1、启动位置设置

System.setProperty("Log4jContextSelector", "org.apache.logging.log4j.core.async.AsyncLoggerContextSelector");

2、引入异步日志依赖

        <dependency>
            <groupId>com.lmax</groupId>
            <artifactId>disruptor</artifactId>
            <version>3.3.7</version>
        </dependency>

注意版本需要3以上

3、日志配置文件

    <Appenders>
        <RollingRandomAccessFile name="file" fileName="${LOG_HOME}/${FILE_NAME}.log"
                                 filePattern="${LOG_HOME}/${FILE_NAME}_%d{yyyy-MM-dd}-%i.log"
                                 immediateFlush="false">
            <PatternLayout pattern="${LOG_PATTERN}"/>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1"/>
                <SizeBasedTriggeringPolicy size="100 MB"/>
            </Policies>
            <DefaultRolloverStrategy max="50"/>
        </RollingRandomAccessFile>

        <RollingRandomAccessFile name="errorLog" fileName="${LOG_HOME}/error/${FILE_NAME}-error.log"
                                 filePattern="${LOG_HOME}/error/${FILE_NAME}-error-%d{yyyy-MM-dd}.log">
            <PatternLayout pattern="${LOG_PATTERN}"/>
            <Policies>
                <SizeBasedTriggeringPolicy size="50 MB"/>
            </Policies>
            <Filters>
                <!-- 只记录error级别信息 -->
                <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
            <!-- 指定每天的最大压缩包个数,默认7个,超过了会覆盖之前的 -->
            <DefaultRolloverStrategy max="50"/>
        </RollingRandomAccessFile>
    </Appenders>  

    <root level="info" includeLocation="true">
        <appender-ref ref="file" />
        <appender-ref ref="errorLog" />
    </root>

注意还是使用<root>标签,而不是<asyncRoot>,asyncRoot标签仅为混合同步异步使用。

增加includeLocation="true",immediateFlush="false"

 

以上三步,即可实现log4j2异步日志,缺一不可

二、spring boot改log4j2

1、若引入了spring-boot-starter-web,则需要去除spring boot的默认日志框架logback

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions><!-- 去掉默认配置 -->
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

2、添加log4j2

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>

三、logId实现

ThreadContext.put("logId", "logId");

ThreadContext.remove("logId");

在接受rpc或http请求的地方添加logId,请求结束删除。

这个方法无法实现多线程同一个logId,并且使用MDC的方式对log4j2无效

多线程logId实现还待研究,希望留言交流。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值