对多个应用程序使用log4j的应用程序级日志不能在weblogic上工作



我使用weblogic在服务器上部署了两个应用程序。我已经为每个应用程序创建了单独的属性文件和配置servlet。但是出现的问题是,日志记录器附加到最新部署的应用程序的日志文件中。代码在tomcat上工作得很好,但当部署在weblogic服务器上时,它的行为就像只有一个实例在工作,而且也是最新的一个。

log4j。我放入WEB-INF:

的属性文件
log4j.rootLogger=INFO, R 
log4j.appender.R=org.apache.log4j.RollingFileAppender 
log4j.appender.R.File=C:abc.log
log4j.appender.R.MaxFileSize=10MB 
log4j.appender.R.MaxBackupIndex=10 
log4j.appender.R.Append=true
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d %-5p %c (%F:%L) - %m%n

我已经把log4j-1.2.14.jar放在所有库所在的lib文件夹中。

在servlet init()方法中初始化:

public void init() throws ServletException {
    logger.info("Servlet...................");
    super.init();
    String prefix = getServletContext().getRealPath("/");
    String log4j = getServletContext().getInitParameter"log4jConfig");
    if (log4j != null) {
        PropertyConfigurator.configure(prefix + log4j);
        }
    }

和web.xml条目是:

<context-param>
       <param-name>log4jConfig</param-name>
       <param-value>/WEB-INF/log4j.properties</param-value>
  </context-param>

你应该理解类加载器的结构:

        Bootstrap
            |
         System
            |
         Common
         /     
     Webapp1   Webapp2

下面是类加载器的层次结构:

  • Tomcat 6.0
  • Weblogic

如果你把你的log4j.jar放到公共类加载器,例如,Tomcat的$CATALINA_BASE/lib,所有的web应用程序将共享相同的类,你将能够只有一个log4j配置为所有的web应用程序。

解决此问题的最简单方法是将log4j.jar的单独副本放到WEB-INF/lib文件夹和log4j中。属性文件到web应用程序的web - inf/classes文件夹。注意,在这种情况下,您根本不需要任何log4j初始化。下面是关于Tomcat的log4j配置的文档。

更新正如在Weblogic中所说,类加载模型与Tomcat略有不同:

weblogic.xml Web应用程序部署描述符包含一个元素的子元素 & lt; container-descriptor> 元素)。默认情况下,此元素设置为。将此元素设置为True会破坏类加载器委托模型,以便类定义来自Web应用程序加载优先于类定义在更高的级别类加载器。这允许Web应用程序使用自己版本的一个第三方类,它也可能是WebLogic Server的一部分。

请尝试在Weblogic中将设置为true。在那之后,每个web应用程序可能会得到它自己版本的类。

相关内容

最新更新