背景:
在生产环境中,排程问题都是通过日志,所以日志很重要。
日志有三个部分组成
-
Logger
-
Appender
-
Layout
一般日志都会有对应的配置文件, log4j2.xml
或者是 logback-spring.xml
,日志的输出格式在 Pattern
标签中
1、确认日志框架:确认日志框架是 log4j2
、logback
还是其他的框架
2、了解日志文件输出格式的语法:Log4j – Log4j 2 Layouts (apache.org)
3、使用skywalking
的traceId
项目都是多线程的,同一时间可能会有多个线程的日志,这样查看某个请求的日志就会很混乱,怎样只看一个请求的日志??
如果项目集成了skywalking
,那就可以用 traceId
了
SpringBoot
集成 skywalking
的traceId
引入依赖即可(如果是logback
,引入logback
相关依赖即可)
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-log4j-2.x</artifactId>
<version>${version}</version>
</dependency>
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-logback-1.x</artifactId>
<version>9.3.0</version>
</dependency>
日志配置变量映射
不能修改现有的日志配置文件,并且想要将 skywalking
的traceId
映射到配置文件中指定的位置
引入依赖
<!-- https://mvnrepository.com/artifact/org.apache.skywalking/apm-toolkit-trace -->
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-trace</artifactId>
<version>9.3.0</version>
</dependency>
在日志文件配置中,[%X{tid}] logback用了非标准语法,怎么给他赋值
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.pattern.Converter;
import ch.qos.logback.core.pattern.PatternLayout;
import ch.qos.logback.core.spi.DeferredProcessingAware;
import java.util.Map;
@Plugin(
name = "TraceIdConverter",
category = "Converter"
)
@ConverterKeys({"tid"})
public class TidConverter extends Converter<Object> {
@Override
public String convert(ILoggingEvent event) {
Map<String, String> mdc = event.getMDCPropertyMap();
// 获取skywalking的traceId
String traceId = TraceContext.traceId();
return traceId != null ? "[" + traceId + "]" : "[N/A]";
}
@Override
public boolean isDeferredProcessingAware() {
return false;
}
}
标签:traceId,qos,SpringBoot,使用,import,skywalking,logback,日志
From: https://www.cnblogs.com/miefind/p/18350877