新的項(xiàng)目中使用logback+slf4j替換了原來(lái)的log4j+slf4j,并且是作為一個(gè)Web Application在tomcat中運(yùn)行,發(fā)現(xiàn)生成的日志文件中所有中文都是亂碼。
首先想到的解決方法就是logback中設(shè)置生成的日志文件的編碼。在網(wǎng)上找到了兩種設(shè)置,但是都不起作用:
1. 設(shè)置Encoding。在appender中增加一行<Encoding>UTF-8</Encoding>,但是在啟動(dòng)中報(bào)錯(cuò),說(shuō)是不能識(shí)別Encoding元素。有人說(shuō)Encoding在0.9.22以后版本中已經(jīng)不能用了。于是就找到了第二種方法。
2. 在Encoder中設(shè)置charset。logback實(shí)現(xiàn)了集中不同的Encoder,其中LayoutWrappingEncoder中有一個(gè)charset屬性,并且有人提到可以通過(guò)charset設(shè)置日志文件編碼。于是就將encoder屬性修改為:
- <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
- <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} : %p [%c] [%t] %m%n</pattern>
- <charset>UTF-8</charset>
- </encoder>
可是在啟動(dòng)時(shí)又提示找不到pattern。
因此兩個(gè)方法都以失敗而告終。可能是我沒(méi)有找到正確的設(shè)置方法,如果有成功設(shè)置的朋友請(qǐng)分享。
最后,想到logback默認(rèn)應(yīng)該使用程序運(yùn)行時(shí)的編碼,也就是tomcat啟動(dòng)時(shí)的編碼,那么就可以通過(guò)設(shè)置tomcat啟動(dòng)時(shí)的JVM參數(shù)來(lái)更改編碼:
打開(kāi)catalina.bat,在代碼的第一行即set CATALINA_OPTS之前,增加一行:
set JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding=UTF-8
重新啟動(dòng)tomcat測(cè)試,日志文件正常。
|