如果战争不同,将同一类记录到不同的文件

时间:2013-10-13 21:11:11

标签: java tomcat logging log4j slf4j

我需要将1批应用程序拆分为3个不同的应用程序。代码几乎相同,我刚刚修改了ANT构建脚本,并为不同的应用程序排除或包含了一些依赖项。比我为每场战争设置了不同的web.xml。每个web.xml都为不同的行为定义了不同的bean应用程序上下文。

所有战争都在一个tomcat服务器上运行。应用程序使用log4j,但现在我重构它以使用slf4j。以为我仍然需要在slf4j下使用log4j。

我遇到的问题是每个应用程序日志必须出现在不同的日志文件中, 即使班级名称相同。

  • 我无法编写不同的log4j.properties文件,因为管理员将其放在所有应用程序的tomcat / lib文件夹中。
  • 我尝试在tomcat / lib中放置3个文件,并在初始化servlet时更改每个应用程序的配置文件名,但它同时针对所有应用程序进行了更改。

我现在能想到的唯一解决方案是将log4j-over-slf4j包装起来,创建3个不同的slf4j日志工厂,为每个日志名称附加一些前缀。例如,如果我有这个日志:

 private final Logger logger = LoggerFactory.getLogger(MainProcessor.class);

每个日志记录工厂都会对这些日志记录名称进行更改(使用前缀app1,app2和app3):

app1.com.test.MainProcessor
app2.com.test.MainProcessor
app3.com.test.MainProcessor

有没有更好的方法来解决这个问题?

1 个答案:

答案 0 :(得分:0)

尝试使用钩子方法,激活事件等,因此日志记录不会发生在应用程序之间共享的类中,而是发生在每个应用程序唯一的某些(顶级)类中。 变量是静态访问某些日志记录类,从应该发生日志记录的类中使用单例等,但在应用程序初始化时将上下文设置为该日志记录类。