天天看点

log4j日志文件乱码问题的解决方法

 近日在aix上用log4j打印日志,出现乱码,经过努力解决问题。

症状:在默认语言非中文(或者说默认语言不支持中文的)的windows、linux、unix上,用log4j打印日志,出现乱码,常见的就是一堆问号。

解决方法:

如果是log4j.properties为配置文件,比如:

log4j.appender.a1=org.apache.log4j.rollingfileappender

log4j.appender.a1.file=all.log

加入一行:

log4j.appender.a1.encoding=utf-8

如果是log4j.xml为配置文件,比如:

<appender name="a1" class="org.apache.log4j.rollingfileappender">

<param name="file" value="all.log" />

......

</appender>

<param name="encoding" value="utf-8" />

原理:

log4j通过quietwriter写日志,quietwriter extends filterwriter,filterwriter extends writer,而writer写入的是字符流,对字符集比较敏感。英文系统一般默认latin-1字符集,只能处理半角,通过encoding指定字符集后,能够正确输出指定字符集的字符流。

字符集指定后,writerappender的setencoding通过org.apache.log4j.config.propertysetter.setproperties(object obj, properties properties, string prefix)设置字符集。