如何将 logstash logback 编码器的一些方法包装到内部字段中



我希望能够将logstash logback编码器生成的一些字段包装在另一个字段中。这可以通过logback-spring中的XML配置来完成吗.xml还是我必须实现某个类然后在配置中引用它?

我尝试阅读有关实现工厂和装饰器方法的信息,但它似乎没有让我得到任何帮助。

<appender name="FILE"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>/Users/name/dev/test.log
    </file>
    <rollingPolicy
        class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- daily rollover -->
        <fileNamePattern>/Users/name/dev/log/test.%d{yyyy-MM-dd}.log
        </fileNamePattern>
        <maxHistory>30</maxHistory>
    </rollingPolicy>
    <encoder class="net.logstash.logback.encoder.LogstashEncoder">
        <customFields>{"component":"webserver","datacenter":"ord"}
        </customFields>
    </encoder>
</appender>

当某些内容记录时,我得到的当前 JSON 是:

{
  "@timestamp": "2019-07-18T18:12:49.431-07:00",
  "@version": "1",
  "message": "Application shutdown requested.",
  "logger_name":     "org.springframework.boot.admin.SpringApplicationAdminMXBeanRegistrar$SpringApplicationAdmin",
  "thread_name": "RMI TCP Connection(2)-127.0.0.1",
  "level": "INFO",
  "level_value": 20000,
  "component": "webserver",
  "datacenter": "ord"
}

我想要的是:

{
  "@timestamp": "2019-07-18T18:12:49.431-07:00",
  "@version": "1",
  "component": "webserver",
  "datacenter": "ord",
  "data": {
    "message": "Application shutdown requested.",
    "logger_name": "org.springframework.boot.admin.SpringApplicationAdminMXBeanRegistrar$SpringApplicationAdmin",
    "thread_name": "RMI TCP Connection(2)-127.0.0.1",
    "level": "INFO",
    "level_value": 20000
  }
}

如您所见,一组选定的字段被包装在"数据"中,而不是稍后包含在外部。

而不是使用

net.logstash.logback.encoder.LogstashEncoder ,您需要使用net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder并配置其providers集。 使用nestedField提供程序创建嵌套data字段。

配置

LoggingEventCompositeJsonEncoder 比 配置LogstashEncoder 更复杂,因为LoggingEventCompositeJsonEncoder开始时没有配置任何提供程序,您必须使用所需的所有提供程序来构建它。 LogstashEncoder 只是具有一组预配置提供程序的LoggingEventCompositeJsonEncoder子类。

<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
  <providers>
    <timestamp/>
    <version/>
    <pattern>
      <pattern>
        {
          "component": "webserver",
          "datacenter":"ord"
        }
      </pattern>
    </pattern>
    <nestedField>
      <fieldName>data</fieldName>
      <providers>
        <message/>
        <loggerName/>
        <threadName/>
        <logLevel/>
        <callerData/>
        <stackTrace/>
        <context/>
        <mdc/>
        <tags/>
        <logstashMarkers/>
        <arguments/>
      </providers>
    </nestedField>
  </providers>
</encoder>

请务必查看提供程序配置文档,了解每个提供程序的各种配置选项。

最新更新