文章目录
- 1. 简介
- 2. 实战案例
-
- 2.1 环境依赖
- 2.2 快速入门
- 2.3 输出到文件
- 2.4 添加附加字段
- 2.5 自定义日志格式
- 总结
1. 简介
日志记录是应用故障排除中早已确立的部分,也是可观测性的三大支柱之一,另外两个是指标和追踪。在生产环境中,没有人喜欢盲目行事,而当故障发生时,开发人员会很高兴有日志文件可供参考。日志通常以人类可读的格式输出。
结构化日志记录是一种技术,其中日志输出以定义明确、通常机器可读的格式编写。这种格式可以输入到日志管理系统中,并启用强大的搜索和分析功能。结构化日志记录最常用的格式之一是JSON
。
随着Spring Boot 3.4
的发布,结构化日志记录得到了开箱即用的支持。它支持Elastic Common Schema (ECS)
和Logstash格式
,但也可以扩展以支持自定义的格式。
2. 实战案例
由于Spring Boot3.4
的正式发布将在2024/11/21
,所以我们目前只能使用对应的里程碑版本(我使用的M3
)。
2.1 环境依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.4.0-M3</version>
<relativePath/>
</parent>
注意:你需要配置专用的仓库地址才可下载非正式版本。
2.2 快速入门
该版本默认还是常规机器可读的格式输出日志,所以我们需要做如下配置
logging:
structured:
format:
console: ecs
使用ecs格式
输出到控制台
控制台将以JSON格式
输出日志。
2.3 输出到文件
你还可以将结构化日志写入文件。例如,这可用于在控制台上打印人类可读日志,并将结构化日志写入文件供机器提取。
要启用此功能,请将如下配置添加到配置文件当中,并确保删除 logging.structured.format.console=ecs
设置:
logging:
file:
name: json.log
structured:
format:
file: ecs
如上配置后,将在项目的根目录下生成json.log
日志文件,文件内容将于上面控制台的日志一样。
2.4 添加附加字段
结构化日志记录的一个强大功能是,开发人员可以以结构化的方式向日志事件中添加信息。例如,可以向每个日志事件中添加用户ID
,最后根据该ID
进行过滤,以查看该特定用户执行了哪些操作。
Elastic Common Schema
和Logstash
都会在JSON
中包含Mapped Diagnostic Context
(映射诊断上下文)的内容。为了看到这一点是如何工作的,让我们创建自己的日志消息:
@Component
public class PackCustomLogger implements CommandLineRunner