私は logstash-logback-encoder:7.0.1 を使用しています
次のように、いくつかの構造化された引数をログに記録しています
log.info("Get container",
v(StructuredLoggingFields.TENANT_ID, tenantId),
v(StructuredLoggingFields.CONTAINER_ID, containerId));
注:そのクラスは装備されています@Log4j2
しかし、ログ ファイルの JSON に引数が表示されない
{
"app":"Signal Service",
"ts":"2022-02-02T18:22:21.312Z",
"level":"INFO",
"class":"com.tbd.platform.signal.controller.ContainerController",
"method":"getContainer",
"caller_file_name":"ContainerController.java",
"line":153,"thread":"http-nio-8080-exec-2",
"msg":"Get container"
}
私のlogback-spring.xml
は次のとおりです
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<contextName>Signal Service</contextName>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<contextName>
<fieldName>app</fieldName>
</contextName>
<timestamp>
<fieldName>ts</fieldName>
<timeZone>UTC</timeZone>
</timestamp>
<logLevel>
<fieldName>level</fieldName>
</logLevel>
<callerData>
<classFieldName>class</classFieldName>
<methodFieldName>method</methodFieldName>
<lineFieldName>line</lineFieldName>
</callerData>
<threadName>
<fieldName>thread</fieldName>
</threadName>
<mdc/>
<arguments>
<includeNonStructuredArguments>false</includeNonStructuredArguments>
</arguments>
<stackTrace>
<fieldName>stack</fieldName>
</stackTrace>
<message>
<fieldName>msg</fieldName>
</message>
</providers>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="CONSOLE"/>
</root>
</configuration>
更新: Spring を使用している場合は適切な出力が表示されますが、Spring の場合は表示されないよう2.5.8
です2.5.9
。
@Log4j2
更新 2: に切り替えたときに@Slf4j
フィールドが表示されるので、これを log4j ライブラリ更新 2.17.1 まで追跡したようです。
更新 3: これはますますバグ (または少なくとも文書化する必要があるもの) のように見えるため、ここに GitHub の問題として記録しましたhttps://github.com/logfellow/logstash-logback-encoder/issues/754