在 logback 中,你可以使用 logback-json-classic 或 logstash-logback-encoder 来输出 JSON 格式的日志。以下是两种常见的方式:
一、使用 logback-json-classic
这是 Logback 官方提供的 JSON 编码器,适用于基本 JSON 日志格式需求。
1. 添加依赖
如果使用 Maven,在 pom.xml 添加:
<dependency>
<groupId>ch.qos.logback.contrib</groupId>
<artifactId>logback-json-classic</artifactId>
<version>0.1.5</version>
</dependency>
<dependency>
<groupId>ch.qos.logback.contrib</groupId>
<artifactId>logback-jackson</artifactId>
<version>0.1.5</version>
</dependency>
Code language: HTML, XML (xml)
对于 Gradle:
implementation 'ch.qos.logback.contrib:logback-json-classic:0.1.5'
implementation 'ch.qos.logback.contrib:logback-jackson:0.1.5'
Code language: JavaScript (javascript)
2. 配置 logback.xml
<configuration>
<appender name="JSON_FILE" class="ch.qos.logback.core.FileAppender">
<file>logs/app.json</file>
<encoder class="ch.qos.logback.contrib.json.classic.JsonLayoutEncoder">
<jsonFormatter class="ch.qos.logback.contrib.jackson.JacksonJsonFormatter"/>
</encoder>
</appender>
<root level="info">
<appender-ref ref="JSON_FILE"/>
</root>
</configuration>
Code language: HTML, XML (xml)
这样日志将以 JSON 格式存入 logs/app.json。
二、使用 logstash-logback-encoder(推荐)
这个库是 logstash 生态的一部分,功能更强大,支持 ELK、结构化日志等。
需要注意:logstash7.4仅适配logback1.3.x,暂不支持logback1.2.x,如果您的项目使用的是logback1.2.x需要使用logstash6.6版本或者升级logback志1.3.x版本。
详情参考以下文章:https://www.haibakeji.com/archives/932.html
1. 添加依赖
Maven:
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>7.4</version>
</dependency>
Code language: HTML, XML (xml)
2. 配置 logback.xml
<configuration>
<appender name="JSON_CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="net.logstash.logback.encoder.LogstashEncoder"/>
</appender>
<appender name="JSON_FILE" class="ch.qos.logback.core.FileAppender">
<file>logs/app.json</file>
<encoder class="net.logstash.logback.encoder.LogstashEncoder"/>
</appender>
<root level="info">
<appender-ref ref="JSON_CONSOLE"/>
<appender-ref ref="JSON_FILE"/>
</root>
</configuration>
Code language: HTML, XML (xml)
示例 JSON 日志输出
日志会以 JSON 格式打印:
{
"@timestamp": "2024-02-11T12:34:56.789Z",
"@version": "1",
"message": "User logged in",
"logger_name": "com.example.MyService",
"thread_name": "main",
"level": "INFO",
"level_value": 20000
}
Code language: JSON / JSON with Comments (json)
对比
方法 | 适用场景 | 依赖 | 特点 |
---|---|---|---|
logback-json-classic | 适用于基本 JSON 结构日志 | 轻量级 | 适合本地日志存储 |
logstash-logback-encoder | 适用于 ELK、结构化日志 | 功能更强大 | 支持更多 JSON 格式化功能 |
如果你只是想要 JSON 格式日志,可以用 logback-json-classic;如果你的日志要对接 ELK,建议用 logstash-logback-encoder。