我希望将我们的tomcat实例从5.5.27升级到6.0.32,并且在shared / lib目录中从jars进行日志记录时遇到了一些问题(我在tomcat 6中重新创建了这个目录)。
我们有一个jar文件,我们在构建过程中创建了一个jar文件,其中包含一些公共代码,而在tomcat 5下,它存在于shared / lib下。当我们从这个jar文件中的代码编写日志语句时,它们被写入当时调用jar的Web应用程序的日志文件中。我们的每个webapps在其WEB-INF / lib目录中都有一个log4j.properites和log4j.jar,在shared / lib中也有一个log4j.jar,但没有log4j / properties。
我们正在使用log4j并获取对日志的引用,如下所示:
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class MyClass {
private final static Log CLASS_LOG = LogFactory.getLog(MyClass.class);
}
但是当我将我们的jar,webapps,log4.properties和log4j.jars完全相同的配置移动到tomcat 6中时,来自我们常用jar的日志记录语句就转到catalina.log。
我已经完成了相当多的阅读(包括http://www.mulesoft.com/tomcat-classpath,以及tomcat网站上的类加载器和日志记录文档),而且大多数情况下我无法弄清楚它是如何在tomcat 5中完成的! (我没有把它设置好,这是我继承的东西,直到现在才'工作'。)
有没有人尝试将共享库中的日志转换为webapp日志文件?我认为将共享jar放在每个webapp的WEB-INF / lib目录中会对此进行排序,但之后我会得到许多相同内容的副本。
答案 0 :(得分:2)
查看tomcat6 / 7中的tomcat / conf / catalina.properties。他们弃用了共享和服务器路径,只显式配置了公共路径(例如,tomcat6 / lib很常见)。您可以重新启用共享,我的猜测是您获得与tomcat 5.x类似的体验。
但是,你说你把logging.properties放在WEB-INF / lib中我不认为这是正确的,因为它应该只包含jar文件。它应该在WEB-INF / classes /
中此时,此时,请停止使用公共日志记录。而不是代码到slf4j,因为它有更少的tomcat问题。此外,如果您使用logback而不是log4j,它甚至可以避免使用适配器(例如,您的slf4j调用实际上是直接的logback调用)。使用不同的配置文件(但有在线log4j.property转换器)。
答案 1 :(得分:0)
如果您正在使用Logback,http://logback.qos.ch/manual/contextSelector.html可能会执行您想要的操作。
答案 2 :(得分:0)
我不确切知道tomcat的类加载器是如何配置的。使用我们的websphere应用程序服务器,我们遇到了同样的问题,不得不重新配置类加载器以加载“parent last”。
这意味着首先在应用程序文件夹中搜索配置文件和库,并且只有在找不到所需资源后才会加载Web服务器的配置。
也许就是这种情况,tomcat 5.x就是这样配置的。