SpringBoot日志的使用

https://www.baeldung.com/logback 这里有对logback的介绍

背景:

在生产环境中,排程问题都是通过日志,所以日志很重要。

日志有三个部分组成

  • Logger

  • Appender

  • Layout

一般日志都会有对应的配置文件, log4j2.xml 或者是 logback-spring.xml ,日志的输出格式在 Pattern 标签中

1、确认日志框架:确认日志框架是 log4j2logback 还是其他的框架

2、了解日志文件输出格式的语法:Log4j – Log4j 2 Layouts (apache.org)

3、使用skywalkingtraceId

​ 项目都是多线程的,同一时间可能会有多个线程的日志,这样查看某个请求的日志就会很混乱,怎样只看一个请求的日志??

如果项目集成了skywalking,那就可以用 traceId

SpringBoot集成 skywalkingtraceId

引入依赖即可(如果是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>

日志配置变量映射

不能修改现有的日志配置文件,并且想要将 skywalkingtraceId映射到配置文件中指定的位置

引入依赖

<!-- 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;
    }
}
posted @ 2024-08-09 15:58  Toxic-man  阅读(68)  评论(0)    收藏  举报