请考虑以下情况:
我有一个包含两个模块和一个通用模块的项目(包结构):
com.mysite.moduleone
com.mysite.moduletwo
com.mysite.commonmodule
在上文中,commonmodule
类可以被其他两个模块使用。
问题:
我需要配置Log4J,使moduleone
和moduletwo
的日志消息转到不同的日志文件。我总是可以使用category来完成此操作。
但真正的问题是当我想记录来自commonmodule
的消息时。因此,当从commonmodule
调用moduleone
类时,commonmodule
日志消息应转到moduleone
日志文件。如果从commonmodule
访问moduletwo
,commonmodule
日志消息应转到moduletwo
日志文件。
是否可以以这种方式配置Log4J?有什么意见吗?
PS:我想我的问题很明确。如果有任何困惑,请发表评论,请尽量清除。 :)答案 0 :(得分:1)
是否可以以这种方式配置Log4J?
简而言之,除非您编写自定义过滤器,否则它不适用于log4j。并且该过滤器需要捕获和分析每个日志事件的调用堆栈,这些日志事件会使其成为每个日志追加器......这将是昂贵的。
答案 1 :(得分:0)
我同意@Stephen C关于没有昂贵的自定义记录器无法使用Log4j这样做。
另一个名为Logback的类似日志记录框架支持两个选项,这些选项可能足以消除对自定义appender的需求。它们被称为MDC (Mapped Diagnostic Contexts)和标记。
标记提供了一种向日志记录语句添加自定义信息的方法,您可以(根据公共包的使用方式)传入标记以供使用,具体取决于使用它的模块。
可以通过在公共模块中进入代码之前设置它们然后在离开时取消设置来使用MDC。
它还有filter,可以通过appender过滤。