log4j如何在java代码中设置FileAppender编码?

时间:2013-03-06 18:13:24

标签: java encoding utf-8 log4j

我尝试了以下内容:

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");

但它没有正确打印希腊mu char。如果我按log4j.properties配置我的记录器

,它可以工作

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:0)

如果您使用的是XML配置文件:

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