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

如何用Log4j2(JSON格式)记录所有‘Caused by’异常?

解决Log4j2完整记录异常链的问题

你的问题出在配置里直接使用exceptionRootCause解析器,它会直接跳转到最底层的根异常,跳过了中间的异常节点。要完整记录整个异常链,需要利用exception解析器的递归特性,逐层遍历每个异常的cause。

修改后的异常配置部分

替换你当前配置中的exception节点为以下内容:

"exception": {
  "class_name": {
    "$resolver": "exception",
    "field": "className"
  },
  "message": {
    "$resolver": "exception",
    "field": "message"
  },
  "stack_trace": {
    "$resolver": "exception",
    "field": "stackTrace",
    "stackTrace": {
      "elementTemplate": {
        "class_name": {
          "$resolver": "stackTraceElement",
          "field": "className"
        },
        "method": {
          "$resolver": "stackTraceElement",
          "field": "methodName"
        },
        "file": {
          "$resolver": "stackTraceElement",
          "field": "fileName"
        },
        "line": {
          "$resolver": "stackTraceElement",
          "field": "lineNumber"
        }
      }
    }
  },
  "cause": {
    "$resolver": "exception",
    "field": "cause",
    "template": {
      "class_name": {
        "$resolver": "exception",
        "field": "className"
      },
      "message": {
        "$resolver": "exception",
        "field": "message"
      },
      "stack_trace": {
        "$resolver": "exception",
        "field": "stackTrace",
        "stackTrace": {
          "elementTemplate": {
            "class_name": {
              "$resolver": "stackTraceElement",
              "field": "className"
            },
            "method": {
              "$resolver": "stackTraceElement",
              "field": "methodName"
            },
            "file": {
              "$resolver": "stackTraceElement",
              "field": "fileName"
            },
            "line": {
              "$resolver": "stackTraceElement",
              "field": "lineNumber"
            }
          }
        }
      },
      "cause": {
        "$resolver": "exception",
        "field": "cause",
        "template": "$ref:$.exception.cause"
      }
    }
  }
}

配置说明

  • 顶层异常直接用exception解析器获取自身的类名、消息和堆栈信息
  • cause字段不再直接跳转到根异常,而是通过exception解析器指定field为cause,并复用异常结构模板
  • 最内层的cause使用$ref递归引用自身模板,实现自动遍历整个异常链,直到没有下一层cause为止

这样配置后,日志就能完整输出c → b → a的整个异常链,和printStackTrace()的输出结构一致。

内容的提问来源于stack exchange,提问作者user6412004

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 08:24:54