1. 程式人生 > >wildfly8 Log包衝突和file.encoding調整

wildfly8 Log包衝突和file.encoding調整

wildfly環境部署就不說了,按照網上的來就OK了。
本文遇到的問題主要是在中文Windows下碰到的。
這裡著重講兩個問題:
1. log包衝突問題。

2. file.encoding 編碼格式問題。

第一個問題:
由於工程引入了很多包,不同包引入了不同的Log實現類,然後就天下大亂了,報錯如下:

    Caused by: java.lang.RuntimeException: java.lang.ClassCastException: org.slf4j.impl.Slf4jLoggerFactory cannot be cast to ch.qos.logback.classic.LoggerContext
    Caused by: java.lang.ClassCastException: org.slf4j.impl.Slf4jLoggerFactory cannot be cast to ch.qos.logback.classic.LoggerContext"}}

這個問題搜了半天,最終在 stackoverflow 上找到解決方案,增加 jboss-deployment-structure.xml 配置檔案,配置檔案內容:
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <deployment>
  <!-- exclude-subsystem prevents a subsystems deployment unit processors running on a deployment -->
     <!-- which gives basically the same effect as removing the subsystem, but it only affects single deployment -->
        <exclusions>
            <module name="org.slf4j" />
            <module name="org.slf4j.impl" />
        </exclusions>
    </deployment>
</jboss-deployment-structure>

該配置檔案放到META-INF目錄下或者WEB-INF目錄下。個人感覺放WEB-INF下比較方便。

第二個問題比較難搞。Windows下啟動standalone.bat,file.encoding會預設載入作業系統的編碼格式,中文Windows下為GBK。
一般wildfly都架設在Linux/Unix上,檔案格式可能也不是GBK,或者專案的編碼也沒有強制要求編碼格式,會與作業系統保持一致,因此也沒有這個問題。
而我們這邊的專案強制要求UTF-8,所以出現了這個現象。這個file.encoding引數,網上也沒有搜到修改它的方法,著實難搞。
後來想到在tomcat伺服器上也碰到過這個問題,網上關於tomcat的資料還是比wildfly豐富很多,很容易找到解決方案:
tomcat/bin目錄下的catalina.bat,修改 set JAVA_OPTS=%JAVA_OPTS% %LOGGING_CONFIG% 為 set JAVA_OPTS=%JAVA_OPTS% %LOGGING_CONFIG% -Dfile.encoding="UTF-8" ,然後file.encoding 就改過來了。

於是我就在standalone.bat中找類似的指令,讓我找到一個: set "JAVA_OPTS=-Dprogram.name=%PROGNAME% %JAVA_OPTS%" ,好像和tomcat不太一樣?抱著試試看的心,將其改為 set "JAVA_OPTS=-Dprogram.name=%PROGNAME% %JAVA_OPTS% -Dfile.encoding=UTF-8" ,再次啟動standalone.bat ,成了!

希望對大家有所幫助。