来源:http://www.coderli.com/log4j-console-file-garbled
一个小问题,却让我感觉到,现在真正动脑的人很少。。我来说说吧。
今天遇到一个小问题,log4j输出到文件乱码,控制台正常。显然是编码问题导致。Google一搜,几乎一水的说:
项目中log4j在英文版linux下输出中文日志为乱码。
由于log4j配置文件中没有设置编码格式(encoding),所以log4j就使用系统默认编码。导致乱码。
解决方法是设置编码格式UTF-8,方法为:
log4j.appender.syslog.encoding=UTF-8
这显然是转的,因为全网几乎一样。这是properties配置的,还不是xml的。如果要xml的,配置如下:<appender name="A1" class="org.apache.log4j.RollingFileAppender">
<param name="Encoding" value="UTF-8" />
<param name="File" value="all.log" />
......
</appender>
但是,我是已经设置成UTF-8,而乱码了。所以,上述答案是不严谨的。
先说说笔者的情况吧,其实笔者的问题很简单,两套log4j appender配置,一个输出的文件,一个控制台,文件的配置了utf-8编码,控制台没配置。现象,控制台正常,文件乱码。
-------------------------------------------
把文件的改成gbk,不乱了。控制台改成gbk,乱码。控制台改成utf-8,正常。到这里你可能糊涂了。怎么这么乱?
其实道理很简单,乱码,自然是编码不匹配。什么匹配?log4j用utf-8输入,你文件是不是utf-8接受的呢?检查一下,果然不是,改成utf-8编码,解决。
你可能要问了,那控制台的匹配在哪里?Eclipse控制台也有是编码的,我想你应该知道。Eclipse控制台是有编码,而且,不仅仅是有,你还可以为每个执行的程序,设置独立的编码。
自然,这里的编码匹配了,也就不会乱码了。
参考二:
http://www.blogjava.net/andy199999/articles/176221.html
手头的项目用LOG4J做日志的输出处理,可不知怎么了,最近输出的日志内容里面居然出现了乱码——问号,而且比较郁闷的是,从另一个类的属性里面读出的中文确可以正常显示,试了各种办法,如给日志增加一项ENCODE为GBK,UTF-8,均不能解决此问题,突然想到会不会是JAVA源文件的问题了???
想到前此因为在MYECLIPSE里面看中文是乱码,我曾经调整过CONTENT TYPES(即window->preferences->general->content types),更改过text的编码格式,即default encode,检查之下,果然如此,于是我把默认的JAVA SOURCES源下的GBK给删除了,然后重新编译,乱码问题解决,呵呵,放在此处,供有心之人在遇到此类问题的时候提个醒:)