2013-03-06 31 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>