我目前正试图将Quarkus中的日志格式从String更改为JSON,并添加一些对我们在elastic/kibana中的监控和数据分析很重要的附加字段。
到目前为止,我已经在官方文档中添加了这个依赖项
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-logging-json</artifactId>
</dependency>
https://quarkus.io/guides/logging
这将日志格式从普通的String更改为完整的JSON格式。
例如:
{"timestamp":"2022-09-05T13:30:09.314+01:00","sequence":24441,"loggerClassName":"org.jboss.logging.Logger","loggerName":"org.com.Controller","level":"INFO","message":"Test","threadName":"executor-thread-0","threadId":354,"mdc":{},"ndc":"","hostName":"hostname","processName":"test.jar","processId":9552}
我的问题是,如何向日志输出中添加额外的字段,例如,我需要添加一个名为"pattern"的额外json字段,每次都从代码中提取一个值。最后的json输出如下:
{"timestamp":"2022-09-05T13:30:09.314+01:00","sequence":24441,"loggerClassName":"org.jboss.logging.Logger","loggerName":"org.com.Controller","level":"INFO","message":"Test","threadName":"executor-thread-0","threadId":354,"mdc":{},"ndc":"","hostName":"hostname","processName":"test.jar","processId":9552, "pattern" :"test-pattern"}
我尝试了文档中指定的以下内容:
quarkus.log.file.json.additional-field.pattern.value=test-value
quarkus.log.file.json.additional-field.pattern.type=string
但这并没有显示任何内容,我也不确定如何以编程方式使用它,
示例配置
quarkus.log.console.json.additional-field."EXTRA".value=test-value
quarkus.log.console.json.additional-field."EXTRA".type=string
quarkus.log.file.json.additional-field."EXTRA".pattern.value=test-value
quarkus.log.file.json.additional-field."EXTRA".pattern.type=string
应该有双引号。和示例输出
{"timestamp":"2022-09-18T14:37:37.687+01:00","sequence":1548,"loggerClassName":"org.jboss.logging.Logger","loggerName":"org.acme.GreetingResource","level":"INFO","message":"Hello","threadName":"executor-thread-0","threadId":101,"mdc":{},"ndc":"","hostName":"mintozzy-mach-wx9","processName":"code-with-quarkus-dev.jar","processId":133458,"EXTRA":"test-value"}
对于完整的工作示例,请检查
您可以使用他们的JsonProvider
使用quarkiverse日志json扩展来解决您的问题
https://github.com/quarkiverse/quarkus-logging-json
quarkiverse日志json扩展比标准的quarkus日志json包更灵活/可扩展,因为您可以通过编程向json日志中添加字段,而不是在硬编码配置中