gpt4 book ai didi

spring-boot - 在 JsonLayout 中添加 MDC 变量 - log4j2

转载 作者:行者123 更新时间:2023-12-03 18:35:15 25 4
gpt4 key购买 nike

如何在log4j2的JsonLayout生成的json日志中添加MDC变量。我已经使用 KeyValuePair 标记将主机名等属性添加到日志中,但我没有找到任何方法将 MDC 变量添加到其中。在模式布局中,我使用了 %X{traceId} 但我确信 JsonLayout 无法解析这些转换字符(据我所知,转换字符仅用于模式布局)。我进入了 JsonLayout 的源代码,但没有找到实际上将所有数据放入日志消息的函数。

谢谢你。

最佳答案

您正在寻找的是 log4j2 lookup .听起来您对 Context Map Lookup 特别感兴趣正如你提到的 MDC(顺便说一下,它现在在 log4j2 中被称为 ThreadContext)。

这是一个简单的例子:

package example;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.ThreadContext;

public class ThreadContextExample {

private static final Logger log = LogManager.getLogger();

public static void main(String[] args) {
ThreadContext.put("myKey", "myValue");
log.info("Here's a message!");
}
}

这是 log4j2.xml 配置:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<JsonLayout compact="false" eventEol="false" stacktraceAsString="true">
<KeyValuePair key="myJsonKey" value="${ctx:myKey}"/>
</JsonLayout>
</Console>

</Appenders>

<Loggers>
<Root level="debug">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>

最后是一些示例输出(为了可读性而缩短):
{
"thread" : "main",
"level" : "INFO",
"loggerName" : "example.ThreadContextExample",
"message" : "Here's a message!",
...
"myJsonKey" : "myValue"
}

关于spring-boot - 在 JsonLayout 中添加 MDC 变量 - log4j2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52446595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com