2013-06-28 81 views
0

我用下面的log4j.xml文件時跳過一個log4j的自定義追加程序的裝載,的Log4j:如何服務器啓動

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> 
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> 
    <appender class="org.apache.log4j.RollingFileAppender" name="FILE"> 
     <param value="${logfile}" name="File" /> 
     <param value="10" name="MaxBackupIndex" /> 
     <param value="200MB" name="MaxFileSize" /> 
     <layout class="org.apache.log4j.PatternLayout"> 
     <param value="%d[%t] %-5p(%F:&lt;%M&gt;:%L)- %m%n" name="ConversionPattern" /> 
     </layout> 
    </appender> 

    <appender class="com.ubsc.at.properties.Log4JCustomAppender" name="CUSTAPPEN"> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param value="%m" name="ConversionPattern" /> 
     </layout> 
     </appender> 

    <appender class="org.apache.log4j.AsyncAppender" name="ASYNC"> 
    <param name="Blocking" value="false"/> 
    <param name="BufferSize" value="512"/> 
     <appender-ref ref="CUSTAPPEN" /> 
    </appender> 

    <root> 
     <level value="${logLevel}" /> 
     <appender-ref ref="FILE" /> 
     <appender-ref ref="ASYNC" /> 
    </root> 
</log4j:configuration> 

我得到的時間碼頭服務器在如下問題開始。

java.lang.ClassNotFoundException: com.ubsc.at.properties.Log4JCustomAppender 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 
     at java.lang.Class.forName0(Native Method) 
     at java.lang.Class.forName(Class.java:169) 
     at org.apache.log4j.helpers.Loader.loadClass(Loader.java:198) 

我想這是因爲log4j.xml的加載比我的自定義Appender類多很多?

無論如何,我可以應用Class Level過濾,以便在服務器啓動期間跳過此類的loadin。

請提前建議,謝謝。

回答

2

恐怕您無法避免使用名爲log4j.xml的文件。由於這是log4j配置文件的默認名稱,因此可能還有其他Log4J安裝,而不是您正嘗試初始化的Log4J安裝。

下面是一些解決方案:

  1. 如果你使用Spring,你可以重命名log4j.xmllog4j-myapp.xml和使用Log4jConfigListener配置log4j。
  2. 如果你不使用Spring,你可以編寫自己的Log4jConfigListener靈感來自Spring的。
  3. 將您的appender打包到單獨的JAR中,並將JAR放入服務器共享庫中。
+0

所有這些方法似乎在生產中發生了很大的變化,所以我想沒有任何簡單的方法可以避免從jetty父類加載器進行Log4JCustomAppender轉義? – Kiran

+0

使用Log4jConfigListener並不是一個很大的改變,但如果您需要生產的快速修復,我沒有任何解決方案。 –

+0

非常感謝 – Kiran