2011-12-01 67 views
1

我使用weblogic在服务器上部署了两个应用程序。我为每个应用程序创建了单独的属性文件和配置servlet。但发生的问题是记录器附加到最新部署的应用程序的日志文件。这个代码在tomcat上运行良好,但是当部署在weblogic服务器上时,它的行为就像只有一个实例在工作,而且这也是最新的。针对多个应用程序使用log4j的应用程序级日志在weblogic上无法正常工作

log4j.properties文件,我把在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初始化Inititalising它()方法:

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> 
+0

我至少可以看到2个拼写错误。在你的代码文件中缺少斜杠和'getServletContext()。getInitParameter“log4jConfig”)''File = C:abc.log''(' – JoseK

回答

1

你应该明白的类加载器的结构:

 Bootstrap 
      | 
     System 
      | 
     Common 
     / \ 
    Webapp1 Webapp2 

H ERE的类加载器的层次结构解释说:

如果你把你的log4j.jar到通用类加载器,例如,为Tomcat到$ CATALINA_BASE/lib下,所有的网络应用程序将共享同一个类,并且您将只能为所有Web应用程序配置一个log4j配置。

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

修订 作为Weblogic说,类加载模式略有不同,从Tomcat:

中的weblogic.xml Web应用程序部署描述符包含一个 <喜欢-WEB-INF类>元素(子元素 <容器描述符>元素)。默认情况下,此元素设置为 。将此元素设置为True会颠倒类加载器 委派模型,以便优先加载来自Web应用程序 的类定义,以优先于类更高级别的类加载器 中的类定义。这允许Web应用程序使用它自己的版本的 第三方类,它也可能是WebLogic Server的一部分。

请尝试设置<喜欢-WEB-INF类>为true的Weblogic。之后,每个Web应用程序可能会获得它自己的类的版本。

+0

嗨Nulldevice,谢谢你的宝贵答案,但是作为你说我已经把log4j.jar的独立副本放到lib文件夹和属性文件夹中,但是它只在一个应用程序的日志中追加了一个最新部署的文件。 –

+0

不过,我坚持classloader hierarhy问题:)请请参阅我的更新以回答问题,并请检查prefer-web-inf-classes元素的值,因为它默认为“false”,这不符合您的需求。 – Nulldevice

+0

我在weblogic.xml中将设置从false更改为true,但它仍然以相同方式运行.... :( –

相关问题