1

我创建了一个 Tomcat webapp 项目。如果我将log4j.xx.jar 和 log4j.properties放在 Tomcat 库中,我会得到日志文件。如果我将 log4j.properties 放在 WEB-INF/classes 中,我不会得到日志文件。我一次又一次地尝试。当我将 log4j.xx.jar 放入 WEB-INF/lib 并将 log4j.properties 放入 WEB-INF/classes时,我又得到了它。为什么?逻辑是什么?

log4j.rootLogger=INFO,A1, A2
#org.apache.log4j.ConsoleAppender
log4j.appender.A1=org.apache.log4j.FileAppender 
log4j.appender.A1.File=D:\\Tomcat2\\logs\\monitor.log
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n

log4j.appender.A2=org.apache.log4j.ConsoleAppender
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
4

2 回答 2

2

log4j.xx.jar和文件都log4j.properties必须由同一个类加载器加载。Tomcat lib 文件由不同于 WEB-INF/lib 文件的类加载器加载。因此,您必须将这两个文件都放在 Tomcat lib 下或将两个文件都放在 WEB-INF/lib 下才能使其工作。

于 2013-07-03T09:19:50.737 回答
2

将 log4j jar 文件放在 WEB-INF/lib

将 log4j.properties 放在您喜欢的任何地方,例如 tomcat/conf 。确保它在类路径中。

然后使用类加载器读取 log4j.properties。

YourClass.class.getClassLoader().getResourceAsStream("相对路径");

我不喜欢将东西放入 tomcat/lib 文件夹的想法。

首先是因为tomcat上的不同应用可能使用不同版本的log4j.jar。并且放入 tomcat/lib 会导致某些应用程序的版本冲突。

其次,将配置文件放在 lib 目录中是不对的。它的正确位置是 conf 文件夹。

于 2013-07-05T18:46:34.640 回答