java - EJB3 相关 ID

标签 java logging ejb-3.0 correlation mdc

现在我的同事从事日志子系统的工作,他们想要绑定(bind)从某些业务方法启动的单独操作。例如,如果 bean A 中的方法调用 bean B 中的某个方法,然后在 bean C 中调用某个方法,那么了解 bean B 中的业务方法会很棒,而 bean C 会为 bean A 中的方法做一些工作。尤其是很棒的是知道 B 和 C 的方法为 bean A 的具体调用完成了一些工作单元。

那么,问题是如何将这些工作单元联系起来?显然,使用方法参数进行绑定(bind)并不美观!

而且我认为是时候问另一个问题了,这个问题与上一个问题足够接近。如果我想将一些上下文信息从 bean A 传播到另一个从 A 调用的 beans 怎么办?安全凭证和安全主体之类的东西?我能做什么? 可能是我问的问题是某种不好的做法?

最佳答案

看起来是 的一个很好的用例, Logback 均可用和 Log4J .本质上,您是将一些自定义值附加到线程,并且来自该线程的所有日志消息都可以将该值附加到消息。

我认为在 EJB 中实现它的最佳方式是 interceptor :

public class MdcInterceptor {

    @AroundInvoke
    public Object addMdcValue(InvocationContext context) throws Exception {
        MDC.put("cid", RandomStringUtils.randomAlphanumeric(16));
        try {
            return context.proceed();
        } finaly {
            MDC.remove("cid");
        }
    }
}

现在你所要做的就是添加:

%X{user}

到您的日志记录模式(logback.xmllog4j.xml)。

另见

关于java - EJB3 相关 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9353532/

相关文章:

java - 什么是 TLS SSL 与 java 1.6 中的 jersey 库的兼容性?

python - Cplex Python如何避免打印输出

javascript - 如何进行 Javascript 调试日志记录

java - Maven 和 EJB3 - 控制客户端的名称

java - JPA 查询异常意外(

java - 持久化 Java 对象的最简单方法是什么?

java - PBEKeySpec 未生成所需的输出 key 长度

java - 如何使用生成的 WebService 添加对 JBoss EJB 的依赖项?

Java数组,随机数生成器+数组排序

android - 了解其他应用在 Android 上崩溃的频率