2013-03-06 30 views
2

我試過如下:log4j如何在Java代碼中設置FileAppender編碼?

File logFile = new File("performance.log"); 
FileAppender appender = new FileAppender(layout, logFile.getName() , false); 
appender.setEncoding("UTF-8"); 
logger.addAppender(appender); 

logger.setLevel((Level) Level.DEBUG); 
logger.setAdditivity(false); 
.... 
logger.info("Finished in " + (System.nanoTime() - start)/1000 + " \u03BCs"); 

不過,這並不正確打印希臘畝字符。它工作,如果我配置我的記錄器每log4j.properties

回答

2

我有同樣的問題,只是偶然發現這個問題。從源代碼看,當你設置編碼時,FileAppender絕對沒有任何功能。具有默認編碼的OutputStreamWriter已在調用構造函數後創建。它僅在void setFile(String fileName, boolean append, boolean bufferedIO, int bufferSize)方法中創建,使用起來非常不方便,但是從void activateOptions()開始調用。無論如何,這可能是!

所以,如果有人仍然有這樣的煩惱,只需添加這一個電話,你是好去:

File logFile = new File("performance.log"); 
FileAppender appender = new FileAppender(layout, logFile.getName() , false); 
appender.setEncoding("UTF-8"); 
appender.activateOptions(); 
+0

謝謝用於'appender.activateOptions();' – datv 2018-01-24 06:23:24

0

如果您使用XML配置文件:

<appender name="customLogFile" class="org.apache.log4j.RollingFileAppender"> 
    <param name="encoding" value="Cp1252" /> 
    ... 
</appender>