我是新来的JAVA。
我想问如何使用java生成这样的日志。
{"log_level":"INFO","timestamp":"2021-12-23T08:39:48.444706Z",
"event_type":"abc_c","capture_id":"400011","cap_pid":"00053716",
"deb":"0100","no_id":"0011",
"msg_id":"d8c5derbn5-63cb-11ec-8980-0242ac110004","module":"S_TH}发布于 2022-06-21 15:40:31
假设您希望在日志文件中使用JSON (您的示例是无效的JSON),则可以使用Slf4j-json记录器
下面是一个讨论更多JSON日志解决方案的白龙文章。
发布于 2022-06-22 15:52:02
如果您使用的是SLF4j和logback,您可以使用来自https://github.com/qos-ch/logback-contrib/wiki/JSON的ch.qos.logback.contrib.json.JsonLayout。
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.contrib.json.classic.JsonLayout">
</layout>
</appender>如果您的目标是Grafana Loki,则可以通过https://loki4j.github.io/loki-logback-appender/直接发送日志。
对于log4j2,有内置的JsonLayout:
<Appenders>
<Console name="ConsoleJSONAppender" target="SYSTEM_OUT">
<JsonLayout complete="false" compact="false">
</JsonLayout>
</Console>
</Appenders>然而,这将只包括默认属性,如时间戳、日志级别、记录器名称和消息。如果要添加自定义属性,则SLF4J具有映射的诊断上下文:
MDC.put("transaction.id", tx.getTransactionId());
MDC.put("transaction.owner", tx.getOwner());
logger.info("my message");
MDC.clear();Logback将自动将所有MDC键值作为JSON映射添加到"mdc“属性下。
如果您使用的是log4j2,则MDC称为ThreadContext。
ThreadContext.put("myKey", "myValue");
log.info("Here's a message!");
ThreadContext.clear();对于log4j2,您需要显式地向JsonLayout添加上下文键。
<Appenders>
<Console name="ConsoleJSONAppender" target="SYSTEM_OUT">
<JsonLayout complete="false" compact="false">
<KeyValuePair key="myKey" />
</JsonLayout>
</Console>
</Appenders>value="${ctx:myKey}"/>https://stackoverflow.com/questions/72703394
复制相似问题