2

私は次のことを試しました:

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 ごとにロガーを構成すると機能します

4

2 に答える 2

3

私は同じ問題を抱えていて、この質問に出くわしました。ソースコードから、FileAppenderエンコーディングを設定してもまったく何もしないようです。OutputStreamWriterwith default encoding は、コンストラクターを呼び出した後に既に作成されています。メソッド内からのみ作成さvoid setFile(String fileName, boolean append, boolean bufferedIO, int bufferSize)れるため、使用するにはかなり不便ですが、から呼び出されvoid activateOptions()ます。とにかく、それはおそらくそれが目的です!

したがって、まだこれに問題がある場合は、次の 1 つの呼び出しを追加するだけで問題ありません。

File logFile = new File("performance.log");
FileAppender appender = new FileAppender(layout, logFile.getName() , false);
appender.setEncoding("UTF-8");
appender.activateOptions();
于 2014-01-29T15:36:56.100 に答える
0

XML 構成ファイルを使用している場合:

<appender name="customLogFile" class="org.apache.log4j.RollingFileAppender">
    <param name="encoding" value="Cp1252" />
    ...
</appender>
于 2016-02-11T22:22:28.437 に答える