wildfly8 Log包衝突和file.encoding調整
本文遇到的問題主要是在中文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
,成了!
希望對大家有所幫助。