Springboot3.4.0结构化日志
2024-12-15 08:53 阅读(169)

前言

日志排查,是系统故障排除必不可少的重要环节,Springboot3.4.0版本发布之后,支持日志结构化,它支持Elastic Common Schema (ECS)和Logstash格式,但也可以使用自己需要的日志格式进行扩展

日志结构化

ecs控制台打印

一般情况下,Springboot打印日志是以下格式

在application.properties配置

logging.structured.format.console=ecs

日志在控制台输出是以下格式

结构化日志写到文件

Springboot3.4.0版本支持将结构化日志写到日志文件里面去,在application.properties配置

logging.structured.format.file=ecs
logging.file.name=./demo-log.log

会有日志文件生成

文件内容为

自定义日志结构化

Springboot3.4.x版本提供了StructuredLogFormatter接口自定义日志格式化

只有Springboot3.4.0才支持


1、定义一个日志类


package cn.com.ut.cloud.demolog.config;

import ch.qos.logback.classic.spi.ILoggingEvent;
import org.springframework.boot.logging.structured.StructuredLogFormatter;

public class MyStructuredLoggingFormatter implements StructuredLogFormatter<ILoggingEvent> {

    @Override
    public String format(ILoggingEvent event) {
        return "time=" + event.getTimeStamp() + ",level=" + event.getLevel() + ",message=" + event.getMessage() + "\n";
    }

}

然后再application-properties配置


logging.structured.format.console=cn.com.ut.cloud.demolog.config.MyStructuredLoggingFormatter

这个时候,日志会按我们需要的进行打印

日志结构化配置

Springboot3.4.x版本支持以下配置


logging.structured.ecs.service.name=MyApp
logging.structured.ecs.service.version=1
logging.structured.ecs.service.environment=Production
logging.structured.ecs.service.node-name=Primary

而且支持MDC打印

package cn.com.ut.cloud.demolog.config;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.MDC;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

import java.util.UUID;

@Component
class MyLogger implements CommandLineRunner {
    private static final Logger logger = LoggerFactory.getLogger(MyLogger.class);

    @Override
    public void run(String... args) {
        MDC.put("userId", UUID.randomUUID().toString());
        logger.info("hello world==================");
        MDC.remove("userId");
    }
}

会有id打印

总结

结构化日志可以帮助在开发过程中,更好的定义日志输出等,至于需不需要,就各自系统开发需求