gpt4 book ai didi

java - 如果 war 不同,则将相同的类记录到不同的文件

转载 作者:行者123 更新时间:2023-11-28 22:30:50 24 4
gpt4 key购买 nike

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

所有 war 都在一台 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

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

最佳答案

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

关于java - 如果 war 不同,则将相同的类记录到不同的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19350339/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com