log4j输出日志乱码(转)

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

log4j日志文件中文乱码处理方法apache

log4j 控制台和文件输出乱码问题解决app

写在前面,第三篇文章中将缘由解释的最清楚,为何设置为UTF-8或者GBK就生效了,缘由是类文件的编码和输入日志的编码必须一致,不然就会出现乱码。post


 

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

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

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

解决方法:.net

若是是log4j.properties为配置文件,好比:日志

log4j.appender.A1=org.apache.log4j.RollingFileAppender
log4j.appender.A1.File=all.log

加入一行:code

log4j.appender.A1=org.apache.log4j.RollingFileAppender  
log4j.appender.A1.Encoding=UTF-8  
log4j.appender.A1.File=all.log  

若是是log4j.xml为配置文件,好比:

<appender name="A1" class="org.apache.log4j.RollingFileAppender">  
        <param name="File" value="all.log" />  
        ......  
</appender>  

加入一行:

<appender name="A1" class="org.apache.log4j.RollingFileAppender">  
        <param name="Encoding" value="UTF-8" />  
        <param name="File" value="all.log" />  
        ......  
</appender>  

原理:

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)设置字符集。


 

类文件编码与输出日志编码不一致致使日志乱码

转:log4j 控制台和文件输出乱码问题解决

一个小问题,却让我感受到,如今真正动脑的人不多。。我来讲说吧。

今天遇到一个小问题,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,正常。到这里你可能糊涂了。怎么这么乱?

其实道理很简单,乱码,天然是编码不匹配。什么匹配?log4jutf-8输入,你文件是否是utf-8编码的呢?检查一下,果真不是,改为utf-8编码,解决。

你可能要问了,那控制台的匹配在哪里?Eclipse控制台也有是编码的,并且,不单单是有,你还能够为每一个执行的程序,设置独立的编码。

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

相关文章
相关标签/搜索