You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过OpenTelemetry Java Agent嵌入Appender添加调用方等日志字段?

实现OpenTelemetry Java Agent嵌入式Log4j Appender添加指定字段

方法1:通过系统属性快速启用字段捕获

OpenTelemetry Java Agent针对Log4j的 instrumentation提供了实验性配置,可直接开启部分字段的捕获:

  • 捕获threadName:添加系统属性
    -Dotel.instrumentation.log4j-appender.experimental.capture-thread-context=true
    
  • 捕获调用者信息(callerClass和callerLine):开启调用栈捕获
    -Dotel.instrumentation.log4j-appender.experimental.capture-call-stack=true
    
    开启后,默认会在日志的stack_trace节点下包含调用类和行号,但如果需要将这两个字段单独提取出来,就得用自定义JSON模板。

方法2:自定义JSON模板精准控制输出字段

OpenTelemetry的嵌入式Log4j Appender基于Log4j的JsonTemplateLayout,你可以通过自定义模板文件来定义想要的输出结构:

  1. 创建模板文件(例如otel-log-template.json),内容如下:
{
  "timestamp": {
    "$resolver": "timestamp",
    "pattern": "yyyy-MM-dd'T'HH:mm:ss.SSSXXX"
  },
  "trace_id": {
    "$resolver": "mdc",
    "key": "trace_id"
  },
  "span_id": {
    "$resolver": "mdc",
    "key": "span_id"
  },
  "severity": {
    "$resolver": "level",
    "field": "name"
  },
  "message": {
    "$resolver": "message"
  },
  "threadName": {
    "$resolver": "thread",
    "field": "name"
  },
  "callerClass": {
    "$resolver": "caller",
    "field": "className"
  },
  "callerLine": {
    "$resolver": "caller",
    "field": "lineNumber"
  },
  "mdc": {
    "$resolver": "mdc"
  }
}
  1. 在启动参数中添加指定模板路径的属性:
-Dotel.instrumentation.log4j-appender.experimental.json-template-path=/usr/src/app/otel-log-template.json

关键注意点

  • 请使用OpenTelemetry Java Agent 1.20.0及以上版本,这些实验性配置在旧版本中可能不存在。
  • 实验性配置的参数名可能随版本迭代变更,使用前请确认对应版本的特性支持。
  • 若同时开启capture-call-stack和自定义模板,模板中的caller解析器会优先使用捕获到的调用信息。

内容的提问来源于stack exchange,提问作者Руслан Гильмутдинов

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 16:03:14