2012-08-08 82 views
3

为了详细说明,我有一个运行Java 1.6.0_27的Tomcat服务器版本7.0.27。tomcat,2个webapps,2个log4js,但两个应用都登录到一个文件

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

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

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

更新:

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

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

+1

您可以请将配置发布到您的logf4.xml文件中吗?你需要设置多个appender。 – 2012-08-08 09:59:33

+0

如果您将Documentum的运行时jar放置在顶级类路径中,并且该运行时jar引用了log4j.jar,那么它只会加载一次。不过,您不必使用该运行时jar。都是您的.war文件Documentum应用程序? – davidfmatheson 2012-08-08 13:08:35

+0

其实只有一个人使用Documentum。在生产中,这是在两个独立的服务器上,尽管在我们的开发环境中它是一样的。但是我已经做到这样,只有使用Documentum的人才能获得Documentum jar,并确实解决了问题。 – rozner 2012-08-08 13:36:42

回答

1

如果您将Documentum的运行时jar放置在顶级类路径中,并且该运行时jar引用了log4j.jar,那么它将只加载一次。不过,您不必使用该运行时jar,也可以只在Documentum .war中使用它,如果其中一个不是Documentum。

0

你不发表您的属性文件,但我能想到的一些原因:

  1. 您没有写入到不同的文件一个appender,即你需要appender1写入log1.log和appender2写入log2.txt
  2. 您有appender设置正确,但两个应用程序都使用相同的记录器,因此它们都写入相同的文件。
  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); 
    

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

相关问题