【发布时间】:2021-02-23 02:41:34
【问题描述】:
Java 应用,使用 Gradle 构建,实现 SLF4J 和 Logback,使用 Logstash 导出到 Datadog 无代理日志记录。
似乎无法获取要传输的 host、service 或 source 属性:
build.gradle
implementation 'ch.qos.logback:logback-classic:1.2.3'
implementation 'net.logstash.logback:logstash-logback-encoder:6.6'
implementation 'org.slf4j:log4j-over-slf4j:1.7.13'
implementation 'org.slf4j:slf4j-api:1.7.5'
logback.xml
注意我在哪里包含了<host> 和<service> 标签。我也试过<property name=".." value=".."> 和<KeyValuePair key="service" value="java-app" /> 无济于事。
<appender name="JSON_TCP" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<remoteHost>intake.logs.datadoghq.com</remoteHost>
<service>my-favorite-service</service>
<host>${HOSTNAME}</host>
<port>10514</port>
<keepAliveDuration>20 seconds</keepAliveDuration>
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<prefix class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>abc123abc123abc123abc123abc123 %mdc{keyThatDoesNotExist}</pattern>
</layout>
</prefix>
</encoder>
</appender>
文档
这是我从 Datadog 阅读的文档:
-
https://docs.datadoghq.com/logs/log_collection/java/?tab=log4j#agentless-logging
-
https://docs.datadoghq.com/tracing/connect_logs_and_traces/java?tab=log4j2
-
https://docs.datadoghq.com/getting_started/tagging/unified_service_tagging/?tab=kubernetes
此外,文档for logstash-logback-encoder 本身指出:
默认情况下,Logback 的 Context (ch.qos.logback.core.Context) 的每个属性都会作为一个字段出现在 LoggingEvent 中。
默认情况下,Logback 的 Context
(ch.qos.logback.core.Context)的每个属性都会作为一个字段出现在 LoggingEvent 中。
那么,如何在 Logback 的 Context 中添加一个属性呢?
【问题讨论】:
标签: java logstash logback slf4j datadog