logback通过logstash-logback-encoder设置json格式输出

在 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、结构化日志等。

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。

海拔科技

自媒体人,喜欢网络,热爱研究。本站头条号:星河 熊掌号:海拔科技

相关推荐