java - 从 log4j 或 logback 中调用实例继承附加程序

标签 java logging log4j logback

在我的程序中,我有 2 个独立的日志事件流(为简单起见,将它们称为流,实际上是 2 个附加程序)。 Stream1 包含客户端日志记录,Stream2 包含控制日志记录。现在这似乎很容易,除了某些类可以同时出现在客户端日志记录和服务器日志记录中,具体取决于情况。使问题进一步复杂化的是,客户端想要的命令发生在 2 个独立的线程中(其中一个是从线程池中随机获取的),因此不可能使用 MDC 或 NDC 进行任何类型的跟踪。

如果记录器可以从调用实例继承附加程序,那么真正可以简化这一过程。这样我就可以为 2 个记录器设置 2 个附加程序并完成。但是我不知道如何干净或轻松地做到这一点。谁能就如何做到这一点提供任何建议?

注意:如果需要传递某些内容,我确实有一个事件 bean,它会传递到链中的所有内容,以便在必要时使用。

最佳答案

您已经提到客户端处理发生在多个线程中,因此简单的 ThreadLocal 方法可能不起作用...但是 ThreadGroupLocal 可以吗?

参见[ Are there thread group-local variables in Java?

我建议的策略是只向日志框架注册一个附加程序。该附加程序将是您编写的东西。该实现将委托(delegate)给 ThreadLocal/ThreadGroupLocal 附加程序。 附加程序将是特定于客户端或控件的。

另请注意,您的附加程序不应在异步或批处理抽象下进行配置。

关于java - 从 log4j 或 logback 中调用实例继承附加程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2845052/

相关文章:

java - ANDROID没有R.java

asp.net - Log4net 没有记录任何内容

java - Log4J2 属性替换 - 默认

java - 基于输入的动态日志文件命名?

java - bouncycaSTLe 是否支持 RSA PKCS1-OAEP 填充?

java - 错误 : "setFile(null,false) call failed" when using log4j

java - JSlider - 单击使点朝该方向移动

java - Log4J 2 配置监控和按位比较

eclipse - 我可以将 Eclipse 和 Maven 变量替换到 log4j.properties 文件中吗?

java - 无法排除 JBoss 6 EAP 上的日志管理器模块