2012-11-15 135 views
3

與WebLogic11克我做了以下時,橋拋出ClassCastException異常:的Weblogic的Log4j Loggging服務器日誌啓動

,我創建了一個新的appender 1個創建的log4j.xml文件:

<appender name="WEBLOGIC" class="weblogic.logging.log4j.ServerLoggingAppender"> 
    <param name="Threshold" value="ERROR"/> 
    </appender> 

    <root> 
    <priority value="WARN"/> 
    <appender-ref ref="CONSOLE"/> 
    <appender-ref ref="FILE"/> 
    <appender-ref ref="WEBLOGIC"/> 
    </root> 

2更新了$ {} DOMAIN_HOME腳本/bin/setDomainEnv.sh這些變化:

LOG4J_CONFIG_FILE="${DOMAIN_HOME}/config/log4j.xml" 
if [ "${LOG4J_CONFIG_FILE}" != "" ] ; then 
    JAVA_PROPERTIES="${JAVA_PROPERTIES} Dlog4j.configuration=file:${LOG4J_CONFIG_FILE}" 
    export JAVA_PROPERTIES 
fi 

JAVA_OPTIONS="${JAVA_OPTIONS} ${JAVA_PROPERTIES} -Dweblogic.log.Log4jLoggingEnabled=true -Dwlw.iterativeDev=${iterativeDevFlag} -Dwlw.testConsole=${testConsoleFlag} -Dwlw.logErrorsToConsole=${logErrorsToConsoleFlag}" 

3中複製log4j的jar添加到域/ lib目錄

cp ./wlserver_10.3/server/lib/wllog4j.jar user_projects/domains/my_domain/lib/

cp ./wlserver_10.3/server/lib/consoleapp/APP-INF/lib/log4j-1.2.8.jar user_projects/domains/my_domain/lib/

4啓動AdminServer中,但我得到這個錯誤:

java.lang.ClassCastException: weblogic.logging.log4j.ServerLoggingAppender cannot be cast to org.apache.log4j.Appender

+0

你需要包含'log4j-1.2.8.jar'嗎?如果Weblogic有它自己的'Appender',那麼它應該已經包含log4j類,並且可能會有衝突。 – madth3

+0

如果我從$ DOMAIN_HOME/lib目錄中刪除的log4j-1.2.8.jar我得到這個: '<二零一二年十一月十六日上午八時28分49秒MST><日誌管理> Sundance

回答

0

保持第1步,並刪除其他步驟進行修改。

現在將log4j.xml複製到$ DOMAIN_HOME/lib文件夾中。這將使您的log4j.xml保持在服務器的類路徑中,並且服務器將使用此log4j.xml作爲其log4j配置。不需要額外的更改。

+0

如果我從$ DOMAIN_HOME/lib中刪除log4j-1.2.8.jar,這: '<日誌管理> Sundance

+0

我把它放在$ DOMAIN_HOME/lib中我沒有得到這樣的例外,但我沒有得到這個: 'log4j:WARN沒有appender可以被發現的記錄(com.gdc4s.ei.log4jexample.app.lifecycle.MyListener)。 log4j:WARN請正確初始化log4j系統.' – Sundance

0

setDomainEnv.xml文件,請加如低於設定log4j.xml位置:

set LOG4J_CONFIG_FILE=C:\bea\user_projects\domains\dev\lib\log4j.xml 

if NOT "%LOG4J_CONFIG_FILE%"=="" (
    set JAVA_PROPERTIES=%JAVA_PROPERTIES% -Dlog4j.configuration=file:%LOG4J_CONFIG_FILE% 
) 
0

你必須看到的是,如果任憑你得到,如果ServerLogging有效地不是在你機應用工作的警告你域。 可能還沒有,因爲你只是將log4j複製到域/ lib文件夾而不是wllog4j.jar。 所以你的設置看起來像註定不會在任何情況下工作。

對我來說,在我看來你正在接受Class Loader Vodoo Messup。

(1)您爲整個應用程序服務器設置全局log4j屬性文件。 (2)它看起來像weblogic控制檯應用程序本身就是一個耳朵,它捆綁了它自己的LOG4J實現庫,它正在複製到您的域中。

當控制檯應用程序運行時,必須確保使用Log4j,加載Log4j Appender定義的類加載器很可能比知道ServerLoggin橋適配器的類加載器級別低。 因爲這個原因,weblogic在未來的產品中會擺脫LOG4j。 他們有太多的類加載器問題 - JUL日誌記錄你有核心類後面的APP類加載器 - 例如處理程序/適配器。

無論如何。 (3)當weblogic運行時,namley在引導控制檯時可能會運行某種類加載器,它可以對應用程序中綁定的庫進行一定程度的隔離,它會看到: 哦!多好,LOG4j在這裏,讓我們初始化它。其次,LOG4j引導並擊中你的log4j.properties,在那裏你把服務器日誌appender放在那裏 - 交叉切換爲每個人(包括weblogic應用程序控制臺)。 他去找這個圖書館,它在哪裏找到它?

其中之一,他發現在weblogic通用容器庫中的某處wllog4j.jar。在Log4j的基本核心類中,他在域配置或控制檯應用程序的EAR配置中發現了較低的級別。 這不好。

嘗試以下操作: (一)進入WebLogic控制檯應用程序,轉到元Inf文件夾中,並重新編寫weblogi-application.xml中

這將有一個更喜歡應用程序了封裝,看起來像這樣: org.apache.log4j。* </package-name - > < ----這裏我已經評論了這一行。

如果您評論上述行,則應用程序類加載器將在知道這些類的最高父級中搜索log4j庫。 所以,如果你把你的ServerLogger發現在同一級別,你應該沒問題。 (b)在找到wllog4j.jar的同一級別中,將log4j實現庫合併到一起。

檢查你是否仍然有鑄造異常。

當你製作服務器寬橫切配置時要非常小心。

祝你好運。