1

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

所有战争都在一个 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

有没有更好的方法来处理这个问题?

4

1 回答 1

0

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

于 2013-10-13T23:34:16.560 回答