详细说明,我有一个运行Java 1.6.0_27的Tomcat服务器版本7.0.27。
我有两场战争,每场都有自己的log4j jar,也使用slf4j和slf4j-log4j。每个战争都有自己的配置文件(log4j.xml)。
战争1应该使用文件log-1.log,war 2应该使用文件log-2.log但是两者都登录到log-1.log。我已经检查过tomcat安装中没有其他log4j jar,所以我不确定问题出在哪里。我也关闭了共享类加载但没有区别。我的下一步是打开详细的类加载器日志记录和/或开始调试log4j,但也许这里有人知道这是为什么并且可以节省我一些时间。感谢您的任何意见。
更新
好的,我想我得到了这个。 log4j xml文件很好。在做了一个详细的:class之后,我可以看到log4j.jar只被加载一次而且都没有加载。
我正在使用Documentum。他们有一个运行时jar需要使用他们的库,这是一个带有清单文件的空jar。清单指向一堆罐子。换句话说,他们不使用maven ......无论如何......其中一个罐子恰好是在Documentum安装中找到的logj4。所以似乎两个webapps都在使用那个。我认为这是问题所在。待确认......
答案 0 :(得分:1)
如果要将Documentum的运行时jar放在顶级类路径上,并且该运行时jar正在引用log4j.jar,那么它只会加载一次。但是,您不必使用该运行时jar,或者只在Documentum .war中使用它,如果一个是非Documentum。
答案 1 :(得分:0)
您没有发布您的属性文件,但我可以想到一些原因:
您有2个记录器,每个记录器都有自己的appender,但在您的代码中,您没有初始化正确的记录器:
//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);
如果您发布属性文件和记录器初始化代码,则可以更轻松地为您提供帮助。