【问题标题】:LOG4J as singleton, closing appenders on server stop and start (Attempted to append to closed appender)LOG4J 作为单例,在服务器停止和启动时关闭附加程序(尝试附加到关闭的附加程序)
【发布时间】:2011-05-12 00:19:11
【问题描述】:

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

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

我们得到以下错误:

log4j:ERROR Attempted to append to close appender named [mylogger]

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

【问题讨论】:

标签: java servlets jakarta-ee log4j websphere


【解决方案1】:

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

在我们的例子中,我们决定为每个 WebApp 提供一个单独的类加载器。这样,我们可以决定为每个 WebApp 更改 Spring 或 iBatis 等其他框架上的 Log Level。

调试 Classloader(在 WebSphere 中很常见)的最佳方法是找出您正在使用哪个 Log4j jar 以及使用了哪个 log4.properties。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-02
    相关资源
    最近更新 更多