Logstash-logback-encoder:使用 StructuredArguments 而不在消息中格式化?

Chr*_*ker 8 slf4j logstash logstash-logback-encoder

我想知道当使用logstash-logback-encoder 以 JSON 格式登录时,在日志记录调用中使用 StructuredArguments 的最佳实践是什么。

我想在单独的字段中记录一些结构化参数,但我不想将这些参数格式化为文字字符串消息。

如果我像这样编写日志行,一切都会按照我想要的方式正常工作,但是我的 IntelliJ IDEA 和 Sonarqube 静态代码分析都考虑了这个有问题的问题:

log.info("Query executed successfully!", StructuredArguments.value("hits", result.getHits()));
(or more concise)
log.info("Query executed successfully!", v("hits", result.getHits()));
Run Code Online (Sandbox Code Playgroud)

IntelliJ 在这一行发出警告:

提供的参数 (1) 多于指定的占位符 (0)

我怎样才能避免这种情况?当然,我可以消除警告并为其添加例外,但我想知道这是否是最佳实践。

Phi*_*lay 12

如果您不想在日志消息中包含数据,并且想要避免静态分析警告,请使用Markers而不是StructuredArguments

import net.logstash.logback.marker.Markers;

log.info(Markers.append("hits", result.getHits()), "Query executed successfully!");
Run Code Online (Sandbox Code Playgroud)

请参阅此处了解更多详细信息。