SpringBoot 日志配置和请求TraceId设置

摘要:该实例主要是基于slf4j的MDC进行实现tranceId的上下文保存,当然也可以自己定义ThreadLocal进行保存,方式一直,对于跨服务的调用也可以把tranceId放在请求头中,接收方复用该tranceId

基于Filter的实现

拦截所有的请求

1
2
3
4
5
6
7
8
9
10
11
scala复制代码@WebFilter(filterName = "traceIdFilter", urlPatterns = "/*")
@Component
public class TraceFilter extends OncePerRequestFilter {

@Override
protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException {
MDC.put("tranceId", UUID.randomUUID().toString());
filterChain.doFilter(httpServletRequest,httpServletResponse);
}

}

logback.xml配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
xml复制代码<!-- Logback configuration. See http://logback.qos.ch/manual/index.html -->
<configuration>

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%date{HH:mm:ss.SSS} | %X{tranceId} | [%thread] %-5level %logger{36} - %msg%n
</pattern>
</encoder>
</appender>

<logger name="org.springframework.web" level="INFO"/>
<logger name="com.huzhihui" level="INFO"/>
<!-- 指定项目可输出的最低级别日志 -->
<root level="INFO">
<appender-ref ref="STDOUT"/>
</root>
</configuration>

定义控制器

1
2
3
4
5
6
7
8
9
10
11
12
less复制代码@Slf4j
@RestController
public class CommonController {

@RequestMapping(value = "i18n")
public Object i18n(){
log.info("ttts");

log.info("bafgsdaf");
return message;
}
}

image.png

完整应用日志配置

  • application.yml
1
2
3
4
5
6
yaml复制代码spring:
application:
name: env
logging:
file:
path: /var/log/${spring.application.name}
  • logback-spring.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
xml复制代码<?xml version="1.0" encoding="UTF-8"?>
<configuration>

<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<springProperty name="APPLICATION_NAME" source="spring.application.name" />

<property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}" />
<property name="CONSOLE_LOG_PATTERN" value="[${APPLICATION_NAME}] %clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>
<property name="FILE_LOG_PATTERN" value="[${APPLICATION_NAME}] %d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>
<property name="LOG_CHARSET" value="UTF-8"/>

<!-- 控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>${LOG_CHARSET}</charset>
</encoder>
</appender>

<appender name="FILE-LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
<charset>${LOG_CHARSET}</charset>
</encoder>
<file>${LOG_FILE}</file>

<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>20MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>7</maxHistory>
<totalSizeCap>1GB</totalSizeCap>
</rollingPolicy>
</appender>

<!--异步输出到文件-->
<appender name="FILE" class="ch.qos.logback.classic.AsyncAppender">
<!--不丢弃日志 默认的,如果队列的80%已满-->
<discardingThreshold>0</discardingThreshold>
<!--更改默认的队列深度,该值会影响性能,默认256-->
<queueSize>512</queueSize>
<!--添加附加的appender,最多只能添加一个-->
<appender-ref ref="FILE-LOG" />
</appender>

<springProfile name="local">
<root level="INFO">
<appender-ref ref="CONSOLE" />
</root>
</springProfile>

<springProfile name="prod">
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</springProfile>

<springProfile name="default">
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</springProfile>

<!-- 动态修改日志等级 -->
<jmxConfigurator />

</configuration>

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%