如何将 logstash logback 编码器的一些方法包装到内部字段中?
How do I wrap some of the methods of logstash logback encoder into an inner field?
我希望能够将 logstash logback 编码器生成的一些字段包装在另一个字段中。这可以通过 logback-spring.xml 中的 XML 配置来完成,还是我必须实现一些 class 然后在配置中引用它?
我尝试阅读有关实现 Factory 和 Decorator 方法的内容,但似乎没有任何帮助。
<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
}
}
如您所见,select 组字段被包裹在 'data' 中,而不是稍后被包裹在外部。
您需要使用 net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder
并配置其 providers
集,而不是使用 net.logstash.logback.encoder.LogstashEncoder
。使用 nestedField
提供程序创建嵌套的 data
字段。
配置 LoggingEventCompositeJsonEncoder
比配置 LogstashEncoder
更复杂,因为 LoggingEventCompositeJsonEncoder
开始时没有配置提供程序,您必须使用所需的所有提供程序进行构建。 LogstashEncoder
只是 LoggingEventCompositeJsonEncoder
的子类,具有 pre-configured 组提供者。
<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>
请务必查看 provider configuration documentation 以了解每个提供商的各种配置选项。
我希望能够将 logstash logback 编码器生成的一些字段包装在另一个字段中。这可以通过 logback-spring.xml 中的 XML 配置来完成,还是我必须实现一些 class 然后在配置中引用它?
我尝试阅读有关实现 Factory 和 Decorator 方法的内容,但似乎没有任何帮助。
<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
}
}
如您所见,select 组字段被包裹在 'data' 中,而不是稍后被包裹在外部。
您需要使用 net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder
并配置其 providers
集,而不是使用 net.logstash.logback.encoder.LogstashEncoder
。使用 nestedField
提供程序创建嵌套的 data
字段。
配置 LoggingEventCompositeJsonEncoder
比配置 LogstashEncoder
更复杂,因为 LoggingEventCompositeJsonEncoder
开始时没有配置提供程序,您必须使用所需的所有提供程序进行构建。 LogstashEncoder
只是 LoggingEventCompositeJsonEncoder
的子类,具有 pre-configured 组提供者。
<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>
请务必查看 provider configuration documentation 以了解每个提供商的各种配置选项。