首页 文章

tomcat,2个webapps,2个log4js,但这两个应用程序都记录到一个文件中

提问于
浏览
3

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

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

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

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

更新:

好吧,我想我得到了这个 . log4j xml文件很好 . 在做了一个详细的:class之后,我可以看到log4j.jar只被加载一次而且都没有加载 .

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

2 回答

  • 1

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

  • 0

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

    • 你没有写入不同文件的appender,即你需要appender1写入log1.log和appender2写入log2.txt

    • 您已将appender设置正确但两个应用程序都使用相同的 Logger ,因此它们都写入同一文件 .

    • 您有2个 Logger ,每个 Logger 都有自己的appender,但在您的代码中,您没有初始化正确的 Logger :

    //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);
    

    如果您发布属性文件和logger初始化代码,它将更容易为您提供帮助 .

相关问题