SpringBoot3.4.0結構化日誌詳解

👉 這是一個或許對你有用的社群
🐱 一對一交流/面試小冊/簡歷最佳化/求職解惑,歡迎加入芋道快速開發平臺知識星球。下面是星球提供的部分資料:
👉這是一個或許對你有用的開源專案
國產 Star 破 10w+ 的開源專案,前端包括管理後臺 + 微信小程式,後端支援單體和微服務架構。
功能涵蓋 RBAC 許可權、SaaS 多租戶、資料許可權、商城、支付、工作流、大屏報表、微信公眾號、ERPCRMAI 大模型等等功能:
  • Boot 多模組架構:https://gitee.com/zhijiantianya/ruoyi-vue-pro
  • Cloud 微服務架構:https://gitee.com/zhijiantianya/yudao-cloud
  • 影片教程:https://doc.iocoder.cn
【國內首批】支援 JDK 17/21 + SpringBoot 3.3、JDK 8/11 + Spring Boot 2.7 雙版本 

前言

日誌排查,是系統故障排除必不可少的重要環節,Springboot3.4.0版本釋出之後,支援日誌結構化,它支援Elastic Common Schema (ECS)和Logstash格式,但也可以使用自己需要的日誌格式進行擴充套件
基於 Spring Boot + MyBatis Plus + Vue & Element 實現的後臺管理系統 + 使用者小程式,支援 RBAC 動態許可權、多租戶、資料許可權、工作流、三方登入、支付、簡訊、商城等功能
  • 專案地址:https://github.com/YunaiV/ruoyi-vue-pro
  • 影片教程:https://doc.iocoder.cn/video/

日誌結構化

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才支援
定義一個日誌類
package

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

import

 ch.qos.logback.classic.spi.ILoggingEvent;

import

 org.springframework.boot.logging.structured.StructuredLogFormatter;

publicclassMyStructuredLoggingFormatterimplementsStructuredLogFormatter<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
classMyLoggerimplementsCommandLineRunner

{

privatestaticfinal

 Logger logger = LoggerFactory.getLogger(MyLogger

.class)

;

@Override
publicvoidrun(String... args)

{

        MDC.put(

"userId"

, UUID.randomUUID().toString());

        logger.info(

"hello world=================="

);

        MDC.remove(

"userId"

);

    }

}

會有id列印
基於 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實現的後臺管理系統 + 使用者小程式,支援 RBAC 動態許可權、多租戶、資料許可權、工作流、三方登入、支付、簡訊、商城等功能
  • 專案地址:https://github.com/YunaiV/yudao-cloud
  • 影片教程:https://doc.iocoder.cn/video/

總結

結構化日誌可以幫助在開發過程中,更好的定義日誌輸出等,至於需不需要,就各自系統開發需求

歡迎加入我的知識星球,全面提升技術能力。
👉 加入方式,長按”或“掃描”下方二維碼噢
星球的內容包括:專案實戰、面試招聘、原始碼解析、學習路線。
文章有幫助的話,在看,轉發吧。
謝謝支援喲 (*^__^*)

相關文章