Java LOG4J作为单例,正在关闭服务器上的appender stop and start(试图附加到已关闭的appender)

Java LOG4J作为单例,正在关闭服务器上的appender stop and start(试图附加到已关闭的appender),java,servlets,jakarta-ee,log4j,websphere,Java,Servlets,Jakarta Ee,Log4j,Websphere,我们有一个j2eeweb环境。服务器配置为跨多个webapps共享会话和类加载器。基本上,一个类加载器可以为多个web应用服务 这似乎会导致log4j出现问题。不同的webapp可能具有不同的log4j配置,但日志记录可能会在一个文件中停止 我们得到以下错误: log4j:尝试附加到名为[mylogger]的已关闭附加程序时出错 服务器:websphere6+ Log4j:1.4.2 Java:1.5 Example log4j.properties (webapp1): log4j.appe

我们有一个j2eeweb环境。服务器配置为跨多个webapps共享会话和类加载器。基本上,一个类加载器可以为多个web应用服务

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

我们得到以下错误:

log4j:尝试附加到名为[mylogger]的已关闭附加程序时出错

服务器: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日志中,反之亦然。我们不希望这样。

Log4j可能只初始化一次,然后随机加载一个或另一个Log4j.properties

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

调试WebSphere中常见的Classloader的最佳方法是找出您正在使用的Log4JJAR以及使用的log4.properties

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

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

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

调试WebSphere中常见的Classloader的最佳方法是找出您正在使用的Log4JJAR以及使用的log4.properties

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

这不是一个完整的复制品吗?不是。在这个问题中,我是在解决附加到封闭附加器的问题。这不是一个完全重复的吗?不是。在这个问题中,我是在解决附加到封闭附加器的问题。