LOG4J作为单例,关闭服务器上的appender停止并启动(尝试附加到关闭的appender)

时间:2010-11-18 12:29:49

标签: java servlets java-ee log4j websphere

我们有一个j2ee网络环境。服务器配置为跨多个webapp共享会话和可能的类加载器。基本上,一个类加载器可以为多个Web应用程序提供服务。

这似乎会导致log4j出现问题。不同的webapps可能有不同的log4j配置,但日志记录可能会停在一个文件中。

我们收到以下错误:

log4j:ERROR尝试附加到名为[mylogger]的已关闭的appender

服务器:websphere6 + Log4j:1.4.2 Java:1.5

Example log4j.properties (webapp1):

log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=/usr/local/file1.log
log4j.additivity.com.app=false

Example log4j.properties (webapp2):

log4j.appender.Z=org.apache.log4j.RollingFileAppender
log4j.appender.Z.File=/usr/local/file2.log
log4j.additivity.com.app=false

目前,从webapp2登录可能会出现在webapp1日志中,反之亦然。我们不希望这样。

1 个答案:

答案 0 :(得分:0)

Log4j可能只初始化一次并随机加载一个或另一个log4j.properties。

在我们的案例中,我们决定让每个WebApp都有一个单独的类加载器。这样,我们可以决定为每个WebApp更改其他框架(如Spring或iBatis)上的日志级别。

调试Classloader(与WebSphere非常相似)的最佳方法是找出您正在使用的Log4j jar以及使用的log4.properties。

URL url = Logger.class.getProtectionDomain().getCodeSource().getLocation();
System.out.println("Sourcing Log4j from " + url