2011-12-01 83 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,但它仍然以相同方式運行.... :( –

相關問題