【问题标题】:Log4j - Logging to multiple log files based on the project modulesLog4j - 基于项目模块记录到多个日志文件
【发布时间】:2010-05-28 07:17:20
【问题描述】:

考虑这种情况:

我有一个项目有两个模块和一个通用模块如下(包结构):

com.mysite.moduleone
com.mysite.moduletwo
com.mysite.commonmodule

在上面,commonmodule 类可以被其他两个模块使用。

问题

我需要配置Log4J,使来自moduleonemoduletwo 的日志消息转到不同的日志文件。我总是可以使用category 来做到这一点。

但真正的问题是当我还想记录来自commonmodule 的消息时。因此,当从moduleone 调用commonmodule 类时,commonmodule 日志消息应该转到moduleone 日志文件。如果从moduletwo 访问commonmodule,则commonmodule 日志消息应转到moduletwo 日志文件。

是否可以以这种方式配置 Log4J?有cmets吗?

PS:我想我已经把我的问题说清楚了。如果有任何困惑,请发表评论,我们会尝试清除它。 :)

【问题讨论】:

    标签: java logging log4j


    【解决方案1】:

    是否可以以这种方式配置 Log4J?

    简而言之,除非您编写自定义过滤器,否则它不适用于 log4j。并且该过滤器需要捕获和分析每个日志事件的调用堆栈,使其进入每个日志附加器......这将是昂贵的。

    【讨论】:

      【解决方案2】:

      我同意@Stephen C 在没有昂贵的自定义记录器的情况下无法使用 Log4j 这样做。

      另一个类似的日志框架 Logback 支持两个选项,这可能足以消除对自定义附加程序的需要。它们被称为MDC (Mapped Diagnostic Contexts) 和标记。

      标记提供了一种将自定义信息添加到日志记录语句的方法,您可以(取决于通用包的使用方式)传入一个标记以根据使用它的模块来使用。

      可以通过在进入公共模块中的代码之前设置它们,然后在离开时取消设置来使用 MDC。

      它还有一个filter,可以通过任一附加器过滤。

      【讨论】:

        猜你喜欢
        • 2011-06-12
        • 1970-01-01
        • 2010-09-22
        • 2014-04-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多