gpt4 book ai didi

Java - 为多个线程创建日志上下文

转载 作者:行者123 更新时间:2023-11-29 07:15:12 27 4
gpt4 key购买 nike

我目前正在研究事件/Activity 日志系统,我正在使用方法拦截器将其实现为一个方面。目前,系统/框架假定每个方法都是一个 Activity ,但我想扩展它,以便一个 Activity 可以跨越多个方法调用。为了做到这一点,第一个想到的方法是为所有相关的方法调用提供一些上下文。但是,如果所有方法调用都在单个线程的上下文中(如 Log4J 的 MDC/NDC),我只知道一种方法来执行此操作。有没有什么方法可以为多线程提供上下文(可能代码不知道多线程)?

最佳答案

不要考虑“日志记录”。它涉及更基本的问题:如果您希望在同一上下文中处理由多个线程完成的操作,您要传播什么以使每个线程知道它们所处的上下文?

如果你能回答这个问题,那么这个上下文就是你需要放入 MDC/NDC 进行日志记录的内容(可能不是整个上下文,而是那个上下文中的一些关键信息)。

如果您的应用程序没有携带此类信息,那么任何人都无法为您确定。


编辑:

我可能会给你一些关于如何执行设置的想法。是否适合使用AOP来进一步增强它,那是你进一步的研究:)

// Assume I have a ContextManager which Context is stored in thread local:

abstract class ContextAwaredJob implements Runnable {
public ContextAwaredJob() {
this.context = ContextManager.getCurrentContext();
}
public void run() {
ContextManager.setCurrentContext(this.context);
doRun();
}
protected abstract void doRun();
}

你的新“工作”将扩展这个父类,如果你由另一个线程运行它,上下文将自动设置。(当然,设计可以改进很多,但它让你对正在发生的事情有一个基本的了解)

关于Java - 为多个线程创建日志上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10167446/

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