2010-05-28 74 views
4

考虑这种情况:的Log4j - 登录到基于项目模块的多个日志文件

我有两个模块,一个共同的模块如下(封装结构)的项目:

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

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

问题

我需要configureLog4J这样的方式从moduleonemoduletwo日志消息转到不同的日志文件。我总是可以使用category来做到这一点。

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

是否可以用这种方式配置Log4J?任何意见? PS:我想我明确提出了我的问题。如果有任何混淆,请发表评论,请尝试清除它。 :)

回答

1

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

简而言之,它不与log4j一起使用,除非您编写自定义过滤器。并且该过滤器需要捕获和分析每个日志事件的调用堆栈,以便将其记录到每个日志appender ...这将会很昂贵。

0

我同意@Stephen C关于无法使用Log4j而不使用昂贵的自定义记录器的情况。

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

标记提供了一种将自定义信息添加到日志记录语句的方法,您可以(取决于如何使用常用程序包)通过标记来使用,具体取决于使用哪个模块。

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

它也有一个filter它可以通过appender进行过滤。