gpt4 book ai didi

java - 在 Java 中使用 react 器模式透明记录关联/请求 ID

转载 作者:行者123 更新时间:2023-12-03 23:14:13 25 4
gpt4 key购买 nike

问题由两部分组成

  1. 此 ID 的正确命名是什么。我在 Internet 上看到不同的名称:关联 ID、请求 ID、事务 ID。我将举一个例子来更好地描述我在说什么,同时我希望它是非常常见和明显的案例。

我希望每个操作的日志都带有唯一 ID,以便能够使用此 ID grep 日志并查看与该操作相关的每个语句。

class Controller {
void process(Request request) {
log.debug("{} Request accepted {}", id, request)
Result result = service.process(request.data())
log.debug("{} Request ended with {}", id, result)
}
}

class Service {
void process(Data data) {
log.debug("{} Service started processing data {}", id, data);
Result resultOne = repoOne.modify(data);
log.debug("{} Repo one returned {}", id, resultOne);
Result resultTwo = repoTwo.modify(data);
log.debug("{} Repo two returned {}", id, resultTwo);
return combinedResult(resultOne, resultTwo);
}
}

并且期望日志在整个过程中具有相同的唯一标识

ABCDE-ID Request accepted WITH DATA
ABCDE-ID Service started processing DATA
ABCDE-ID Repo one returned SUCCESS
ABCDE-ID Repo two returned FAILURE
ABCDE-ID Request ended with FAILURE
  1. 如果应用程序使用 react 器模式,如何在 java 代码中透明地注入(inject)此 id?

在 thread-per-request 模型中,可以使用 log4j 框架中的 MDC 实现这一点。在 rector 模式中,不同的请求在等待 io 操作时由同一个线程并发执行,因此线程局部变量将无济于事。

直接的解决方案是将 id 作为参数添加到每个方法,但这对我来说很难看。我正在寻找另一种解决方案。

最佳答案

如果你能确保调用链将在同一个线程中执行,你可以使用ThreadLocal来存储你的关联id

事实上 Log4J MDC(映射诊断上下文) 功能,允许您开箱即用。

关于java - 在 Java 中使用 react 器模式透明记录关联/请求 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36934618/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com