繁体   English   中英

生成结构化日志java

[英]Generate structured logs java

我是 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}

假设您希望日志文件中有 JSON(您的示例不是有效的 JSON),您可以使用slf4j-json-logger

这是一篇讨论更多 JSON 日志记录解决方案的Baeldung 文章

如果您使用 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}"/>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM