log4j2 日志中添加业务单号

该配置展示了如何在日志系统中自动从上下文获取logId。通过XML配置,定义了控制台和文件的日志输出,包括日志级别、文件大小、滚动策略等。同时,定义了一个MVC拦截器`LogMDCInterceptor`,在每个请求中生成logId,并将其设置到请求属性中。拦截器在Spring MVC配置中被添加,确保每个请求都能携带logId。
摘要由CSDN通过智能技术生成
  • 日志配置如下,自动从上下文中获取 logId
  • 配置mvc拦截器,在每个请求中生成logId 
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="OFF">
    <properties>
        <property name="log_pattern">%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level [LOGID:%X{logId}] %logger{36}\:%L - %msg%n</property>
        <property name="file_name" value="log" />
        <property name="every_file_size">10M</property><!-- 日志切割的最小单位 -->
        <property name="output_log_level">INFO</property><!-- 日志输出级别 -->
        <property name="sql_log_level">${sys:sql.log.level:-DEBUG}</property><!-- sql日志输出级别 -->
    </properties>

    <appenders>
        <!-- 定义控制台输出 -->
        <Console name="console" target="SYSTEM_OUT">
            <!-- <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/> -->
            <PatternLayout charset="UTF-8" pattern="${log_pattern}"/>
        </Console>

        <!-- 显示info级别以上的信息 -->
        <RollingRandomAccessFile name="devLog" fileName="${sys:log.path:-..}/logs/${file_name}.log" filePattern="${sys:log.path:-..}/logs/${file_name}.%d{yyyy-MM-dd-HH}-%i.log" >
            <PatternLayout charset="UTF-8" pattern="${log_pattern}"/>
            <Policies>
                <SizeBasedTriggeringPolicy size="${every_file_size}"/>
            </Policies>
            <Filters>
                <!-- <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/> -->
                <ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
            <DefaultRolloverStrategy max="10"/>
        </RollingRandomAccessFile>

        <!-- 显示error级别以上的信息 -->
        <RollingRandomAccessFile name="errorLog" fileName="${sys:log.path:-..}/logs/${file_name}_error.log" filePattern="${sys:log.path:-..}/logs/${file_name}_error.%d{yyyy-MM-dd-HH}-%i.log" >
            <PatternLayout charset="UTF-8" pattern="${log_pattern}"/>
            <Policies>
                <SizeBasedTriggeringPolicy size="${every_file_size}"/>
            </Policies>
            <Filters>
                <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
            <DefaultRolloverStrategy max="10"/>
        </RollingRandomAccessFile>
    </appenders>

    <loggers>
        <logger name="org.springframework" level="INFO"/>
        <logger name="org.mybatis" level="INFO"/>
        <logger name="org.apache" level="INFO"/>
        <logger name="com.alibaba.nacos" level="ERROR"/>
        <logger name="com.zhongan.mars.dao" level="${sql_log_level}"/>

        <root level="${output_log_level}">
            <appender-ref ref="console"/>
            <appender-ref ref="devLog"/>
            <appender-ref ref="errorLog"/>
        </root>

    </loggers>
</configuration>
public class LogMDCInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        String logTraceId = null;
        if (StringUtils.isNotEmpty(request.getHeader(Constants.LOGHEADERKEY))) {
            logTraceId = request.getHeader(Constants.LOGHEADERKEY);
        } else {
            logTraceId = SnowFlakeUtil.getId();
        }
        //设置logid  传到feign下游
        request.setAttribute(Constants.LOGHEADERKEY, logTraceId);

        return true;
    }
}
@Configuration
public class WebConfig implements WebMvcConfigurer {

    /**
     * 添加拦截器
     * @param registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(getLogMDCInterceptor());
    }

    /**
     * 拦截日志设置 traceId
     * @return
     */
    @Bean
    public HandlerInterceptor getLogMDCInterceptor() {
        return new LogMDCInterceptor();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值