今天遇到一个小问题,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控制台是有编码,而且,不仅仅是有,你还可以为每个执行的程序,设置独立的编码。

eclipse-code

自然,这里的编码匹配了,也就不会乱码了。

你可能感兴趣的内容
1条评论
g4dsmg 1年前
年后初访,表示支持

selfly

交流QQ群:32261424
Owner