当前位置: 首页 > 知识库问答 >
问题:

在jsonLayout-log4j2中添加MDC变量

羊舌胡非
2023-03-14

共有1个答案

韩阳飙
2023-03-14

您要查找的是log4j2查找。听起来您特别对上下文映射查找感兴趣,正如您提到的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"
}
 类似资料:
  • 如何向Log4J2的JsonLayout添加自定义参数? 还有一种方法可以将模式添加到JsonLayout的消息元素中吗? 我已经尝试了这里列出的选项-> logging.apache.org/log4j/2.x/manual/layouts.html#JSONLayout 请救命!

  • 这是我的log4j2。xml配置文件: 输出如下所示: 缺少右方括号。如何配置log4j2以添加结束标记?

  • 显然,log4j2中的JSONLayout没有时间戳模式支持。通常,它只有JSON格式选项,但没有选项。 日志示例, 当我查看他们的API时,看起来太冗长了,没有看到添加时间戳字段的更简单的方法。 我猜它可能会工作,尽管它打破了一些核心log4j-core测试。我基本上想知道以最小的变化添加额外的json字段的诀窍。 我很少看到其他类似JSONEventLayoutV1的impl,它似乎与性能非常

  • 我正在尝试将一个值设置为MDC,以便在有日志的情况下显示在每个日志行中。如果kafka producer中有info(“”),那么日志就不会显示我之前为MDC添加的值。 我有一个拦截器来为correlationId设置“默认值” 我设置了 MDC 相关 Id 值,当它进入控制器时。 仅用于Kafka日志不包括之前添加的 MDC 消息 2022-06-08 10:15:31.616 INFO { c

  • 我已经浏览了之前关于在运行时添加Log4j2附加器的线程,但没有一个真正适合我的场景。 我们将一个长时间运行的Flink作业打包到一个胖jar中,我们基本上将其提交给一个运行的Flink集群。我们想把错误日志转发给哨兵。很方便,Sentry提供了一个我希望能够使用的Log4j2 appender,但所有让Log4j2工作的尝试都失败了——对此有点疯狂(花了几天时间)。 因为Flink(也使用log

  • 我正在为我的web应用程序设置log4j2。问题是,这样配置的记录器没有使用Main和Err appender记录任何内容。如果通过调试器查看log4j2代码,就会发现在log4j2初始化期间没有添加这两个附加符。 以前,每个附加程序都有单独的记录器,但我们只需要一个记录器。这样做有可能吗? 类的工厂方法 以及: