Java Log4j-基于项目模块记录到多个日志文件

Java Log4j-基于项目模块记录到多个日志文件,java,logging,log4j,Java,Logging,Log4j,考虑这个场景: 我有一个包含两个模块和一个通用模块的项目,如下所示(包结构): 在上面的例子中,commonmodule类可以被其他两个模块使用 问题: 我需要配置log4j,使来自moduleone和modulewo的日志消息进入不同的日志文件。我总是可以使用 但真正的问题是,当我还想记录来自commonmodule的消息时。因此,当从moduleone调用commonmodule类时,commonmodule日志消息应转到moduleone日志文件。如果从modulewo访问commonmo

考虑这个场景:

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

在上面的例子中,
commonmodule
类可以被其他两个模块使用

问题

我需要配置log4j,使来自
moduleone
modulewo
的日志消息进入不同的日志文件。我总是可以使用

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

可以用这种方式配置Log4J吗?有什么评论吗

附言:我想我已经把问题说清楚了。如果有任何困惑,请留下评论,我会尽力澄清。:)

可以用这种方式配置Log4J吗


简而言之,除非您编写一个自定义过滤器,否则它不适用于log4j。该过滤器将需要捕获并分析每个日志事件的调用堆栈,这些日志事件将调用堆栈添加到每个日志附加器。。。那会很贵

我同意@Stephen C的观点,即如果没有昂贵的定制记录器,就无法使用Log4j

另一个类似的日志框架Logback支持两个选项,这可能足以消除对自定义appender的需要。它们被称为和标记

标记提供了一种向日志语句添加自定义信息的方法,您可以(取决于公共包的使用方式)传入要使用的标记,具体取决于使用它的模块

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

它也有一个可以通过appender对其中任何一个进行过滤的函数

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