用log4j发送结构化日志字段的方式是什么?

问题描述 投票:0回答:1

使用 slf4j 我可以执行以下操作:

logger.atInfo().setMessage("My message").addKeyValue("foo", "bar").addKeyValue("code", 42).log()

当与 Logback 的 Azure Monitor OpenTelemetry ExporterAppender 一起使用时,会在

traces
App Insight 表中生成条目,如下所示:

extra attributes that I passed

如何使用log4j日志接口达到相同的结果?我找不到接受额外属性的方法重载。

java log4j azure-application-insights slf4j open-telemetry
1个回答
0
投票

如何使用log4j日志接口达到相同的结果?我找不到接受额外属性的方法重载。

    Log4j 中的
  • ThreadContext
    允许您添加上下文数据(如键值对),这些数据将包含在每条日志消息中。这类似于 SLF4J 的 MDC(映射诊断上下文),并且大多数布局都支持,包括
    JsonLayout
    PatternLayout
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.ThreadContext;

public class Logtest {
    private static final Logger logger = LogManager.getLogger(Logtest.class);

    public static void main(String[] args) {
        // Add extra attributes using ThreadContext (similar to SLF4J MDC)
        ThreadContext.put("Role", "Admin");
        ThreadContext.put("Location", "USA");
        ThreadContext.put("SessionId", "abc-123"):

        // Log the message
        logger.info("My message");

        // Clear the context when done
        ThreadContext.clearAll();
    }
}
  • Log4j 的
    MapMessage
    类允许您使用键值对创建结构化日志,这与 SLF4J 的
    addKeyValue()
    方法类似。
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.message.MapMessage;

public class Logtest {
    private static final Logger logger = LogManager.getLogger(Logtest.class);

    public static void main(String[] args) {
        // Create a structured log message using MapMessage
        MapMessage logEntry = new MapMessage();
        logEntry.put("foo", "bar");
        logEntry.put("code", "42");

        // Log the structured message
        logger.info(logEntry);
    }
}

通过上述配置,

ThreadContext
MapMessage
示例都将以结构化 JSON 格式输出日志。

{
  "timeMillis": 1695408341456,
  "thread": "main",
  "level": "INFO",
  "loggerName": "LogExample",
  "message": "This is a structured log message",
  "contextMap": {
    "Role": "Admin",
    "Location": "USA",
    "SessionId": "abc-123"
  }
}

日志跟踪(添加了额外属性):

enter image description here

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.