美文网首页
logback-spring.xml配置

logback-spring.xml配置

作者: 晚歌歌 | 来源:发表于2022-03-30 15:24 被阅读0次

    保存下简易的logback-spring.xm配置,包括spring多环境配置、本地打印SQL日志、简易链路追踪trace_id拦截器

    xml

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration scan="false">
        <springProperty scope="context" name="LOG_PATH" source="logging.file.path" defaultValue="logs"/>
        <property name="CONSOLE_LOG_PATTERN" value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr([%-5level]) %clr([%thread]){magenta} %clr([%X{trace_id}]){blue} %clr([%logger{10}:%L]){cyan} - %msg%n"/>
        <property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] [%thread] [%X{trace_id}] [%logger{10}:%L] - %msg%n"/>
    
        <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <pattern>${CONSOLE_LOG_PATTERN}</pattern>
                <charset>UTF-8</charset>
            </encoder>
        </appender>
    
        <appender name="SYSTEM_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${LOG_PATH}/system_info.log</file>
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>INFO</level>
            </filter>
            <encoder>
                <pattern>${FILE_LOG_PATTERN}</pattern>
                <charset>UTF-8</charset>
            </encoder>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${LOG_PATH}/system_info.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
                <maxHistory>7</maxHistory>
            </rollingPolicy>
        </appender>
    
        <appender name="SYSTEM_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${LOG_PATH}/system_error.log</file>
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>WARN</level>
            </filter>
            <encoder>
                <pattern>${FILE_LOG_PATTERN}</pattern>
                <charset>UTF-8</charset>
            </encoder>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${LOG_PATH}/system_error.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
                <maxHistory>7</maxHistory>
            </rollingPolicy>
        </appender>
    
        <springProfile name="local">
            <root level="INFO">
                <appender-ref ref="CONSOLE"/>
            </root>
            <logger name="com.meetyou.offer" level="DEBUG"/>
        </springProfile>
    
        <springProfile name="!local">
            <root level="INFO">
                <appender-ref ref="SYSTEM_INFO"/>
                <appender-ref ref="SYSTEM_ERROR"/>
            </root>
        </springProfile>
    </configuration>
    

    TraceInterceptor

    package com.meetyou.offer.interceptor;
    
    import org.apache.commons.lang3.StringUtils;
    import org.slf4j.MDC;
    import org.springframework.stereotype.Component;
    import org.springframework.web.servlet.HandlerInterceptor;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.util.UUID;
    
    /**
     * 简易请求链路跟踪拦截器:后续根据APM情况修改
     *
     * @author wg
     * @since 2022/03/30
     */
    @Component
    public class TraceInterceptor implements HandlerInterceptor {
    
        public static final String TRACE_ID_HEADER = "trace_id";
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
            String traceId = request.getHeader(TRACE_ID_HEADER);
            if (StringUtils.isBlank(traceId)) {
                MDC.put(TRACE_ID_HEADER, UUID.randomUUID().toString().replace("-",""));
            } else {
                MDC.put(TRACE_ID_HEADER, traceId);
            }
            return true;
        }
    
    
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
                                    Exception ex) {
            MDC.clear();
        }
    }
    
    

    打印示例

    针对没有接入apm的项目,后续从日志中可以很容易查出请求链路

    2022-03-30 15:15:41.428 [DEBUG] [http-nio-8080-exec-2] [ba121bd6f9ab479c939073ca46ecd9d9] [c.m.o.b.o.d.O.selectMaps:137] - ==>  Preparing: SELECT count(*) as count, tenant, type FROM offer WHERE (status = ?) GROUP BY tenant,type HAVING count <= 30 ORDER BY tenant ASC
    2022-03-30 15:15:41.440 [DEBUG] [http-nio-8080-exec-2] [ba121bd6f9ab479c939073ca46ecd9d9] [c.m.o.b.o.d.O.selectMaps:137] - ==> Parameters: SHELVED(String)
    2022-03-30 15:15:41.536 [DEBUG] [http-nio-8080-exec-2] [ba121bd6f9ab479c939073ca46ecd9d9] [c.m.o.b.o.d.O.selectMaps:137] - <==      Total: 2
    2022-03-30 15:15:41.539 [DEBUG] [http-nio-8080-exec-2] [ba121bd6f9ab479c939073ca46ecd9d9] [c.m.o.t.d.T.selectList:137] - ==>  Preparing: SELECT id,code,created_at FROM tenant
    2022-03-30 15:15:41.539 [DEBUG] [http-nio-8080-exec-2] [ba121bd6f9ab479c939073ca46ecd9d9] [c.m.o.t.d.T.selectList:137] - ==> Parameters: 
    2022-03-30 15:15:41.634 [DEBUG] [http-nio-8080-exec-2] [ba121bd6f9ab479c939073ca46ecd9d9] [c.m.o.t.d.T.selectList:137] - <==      Total: 5
    2022-03-30 15:15:41.657 [INFO ] [http-nio-8080-exec-2] [ba121bd6f9ab479c939073ca46ecd9d9] [c.m.o.m.MonitorController:102] - success
    

    控制台打印效果

    image.png

    文件滚动效果

    image.png

    相关文章

      网友评论

          本文标题:logback-spring.xml配置

          本文链接:https://www.haomeiwen.com/subject/jnxwjrtx.html