java - 请求跟踪记录器

标签 java logging log4j mdc

我陷入了跟踪请求的困境。很容易获得组件名称和时间(使用面向切面编程),但我没有请求的ID(requestID)

我需要这样的日志:

RequestID 组件名称 时间

  • 添加547 C4 5s
  • Search547 C1 5s
  • Search778 C1 2s
  • 添加547 C1 15s
  • Search778 C4 20s
  • Search547 C5 10s
  • Search547 C3 2s
  • Search547 C2 1s
  • Search778 C2 12s
  • Search547 C6 55s
  • Search778 C6 1s
  • 添加547 C2 6s
  • 添加547 C3 46s

为了轻松接收这样的文件,这正是我正在寻找的:

RequestID 组件名称 时间

  • Search547 C1 5s
  • Search547 C5 10s
  • Search547 C3 2s
  • Search547 C2 1s
  • Search547 C6 55s

RequestID 组件名称 时间

  • Search778 C1 2s
  • Search778 C4 20s
  • Search778 C2 12s
  • Search778 C6 1s

RequestID 组件名称 时间

  • 添加547 C4 5s
  • 添加547 C1 15s
  • 添加547 C2 6s
  • 添加547 C3 46s

我所有的研究都引导我将 log4j 与 MDC 和 SiftingAppender 结合使用,但我不确定它是否可以提供唯一 ID 贯穿整个请求,因为它经历了很多类、子系统和线程。

请问是否可以在不改变原有系统的情况下完成? (它应该是一个外部组件)。您知道有任何教程可以演示如何执行此操作吗?

最佳答案

“MDC 是按线程进行管理的。” http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/MDC.html

因此 MDC 将自动跨类和子系统工作,但您需要手动跨线程复制它。

关于java - 请求跟踪记录器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11614268/

相关文章:

java - 是否可以更改我的包中的 log4j 级别,但不能使用例如 spring 更改 api 的 IM 中的级别

java - 关闭特定查询的 Hibernate 日志

java - 动态访问Java类的成员变量

java - 不明白代码逻辑

java - 什么是原始类型,为什么我们不应该使用它呢?

java - 自定义 log4j 滚动附加程序

java - 处理异常后如何恢复代码运行?

java - 微服务的集中式日志包装器

logging - golang 的日志框架,具有适合生产的旋转日志文件和过滤日志级别

python - 使用 twistd 和 python 日志记录到文件