3

为了详细说明,我有一个运行 Java 1.6.0_27 的 Tomcat 服务器版本 7.0.27。

我有两场战争,每场都有自己的 log4j jar,也使用 slf4j 和 slf4j-log4j。每个战争都有自己的配置文件(log4j.xml)。

战争 1 应该使用文件 log-1.log,战争 2 应该使用文件 log-2.log,但两者都登录到 log-1.log。

我已经检查过tomcat安装中没有其他log4j jar,所以我不确定问题出在哪里。我还关闭了共享类加载,但这并没有什么区别。我的下一步是打开详细的类加载器日志记录和/或开始调试 log4j,但也许这里有人知道这是为什么并且可以节省我一些时间。感谢您对此的任何意见。

更新:

好吧,我想我得到了这个。log4j xml 文件很好。在做了详细的:类之后,我可以看到 log4j.jar 只被加载一次,并且从两个 Web 应用程序中都没有加载。

我正在使用 Documentum。他们有一个运行时 jar 需要使用他们的库,这是一个带有清单文件的空 jar。清单指向一堆罐子。换句话说,他们不使用 maven ......无论如何......其中一个 jar 恰好是在 Documentum 安装中找到的 logj4。所以看起来两个 webapps 都在使用那个。我认为这是问题所在。待确认...

4

2 回答 2

1

如果您将 Documentum 的运行时 jar 放在顶级类路径中,并且该运行时 jar 引用 log4j.jar,那么它只会加载一次。但是,您不必使用该运行时 jar,或者您可以仅在 Documentum .war 中使用它(如果一个不是 Documentum)。

于 2012-08-08T14:27:37.617 回答
0

您没有发布您的属性文件,但我可以想到一些原因:

  1. 您没有写入不同文件的附加程序,即您需要 appender1 写入 log1.log 和 appender2 写入 log2.txt
  2. 您正确设置了附加程序,但两个应用程序都使用相同的记录器,因此它们都写入同一个文件。
  3. 您有 2 个记录器,每个记录器都有自己的附加程序,但在您的代码中,您没有初始化正确的记录器:

    //there is no logger called com.sample, so it defaults to root logger that has appender that writes to log1.txt    
    Logger logger = Logger.getLogger(com.sample.MyClass.class);
    

如果您发布您的属性文件和您的记录器初始化代码,它会更容易为您提供帮助。

于 2012-08-08T10:10:56.910 回答