log4j输出⽇志乱码(转)
写在前⾯,第三篇⽂章中将原因解释的最清楚,为什么设置为UTF-8或者GBK就⽣效了,原因是类⽂件的编码和输⼊⽇志的编码必须⼀致,否则就会出现乱码。
structural ambiguity转:
近⽇在AIX上⽤log4j打印⽇志,出现乱码,经过努⼒解决问题。
症状:在默认语⾔⾮中⽂(或者说默认语⾔不⽀持中⽂的)的Windows、Linux、Unix上,⽤log4j打印⽇志,出现乱码,常见的就是⼀堆问号。
解决⽅法:
如果是log4j.properties为配置⽂件,⽐如:
log4j.appender.A1=org.apache.log4j.RollingFileAppender
log4j.appender.A1.File=all.log
加⼊⼀⾏:
log4j.appender.A1=org.apache.log4j.RollingFileAppender
log4j.appender.A1.Encoding=UTF-8
log4j.appender.A1.File=all.log
如果是l为配置⽂件,⽐如:
<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指定字符集后,能够正确输出指定字符集的字符流。
instantclient和plsql字符集指定后,WriterAppender的setEncoding通过org.fig.PropertySetter.setProperties(Object obj, Properties properties, String prefix)设置字符集。
js数组中将一项替换类⽂件编码与输出⽇志编码不⼀致导致⽇志乱码
转:
⼀个⼩问题,却让我感觉到,现在真正动脑的⼈很少。。我来说说吧。
今天遇到⼀个⼩问题,log4j输出到⽂件乱码,控制台正常。显然是编码问题导致。Google⼀搜,⼏乎⼀⽔的说:
项⽬中log4j在英⽂版linux下输出中⽂⽇志为乱码。由于log4j配置⽂件中没有设置编码格式(encoding),所以log4j就使⽤系统默认编码。导致乱码。解决⽅法是设置编码格式UTF-8,⽅法为:
log4j.ding=UTF-8
devops技术工具链这显然是转的,因为全⽹⼏乎⼀样。先不说这是properties配置的,还不是xml的。如果要xml的,配置如下:
<appender name="A1" class="org.apache.log4j.RollingFileAppender">
<param name="Encoding" value="UTF-8" />properties是什么文件
<param name="File" value="all.log" />
......
</appender>
但是,我是已经设置成UTF-8,⽽乱码了。所以,上述答案是不严谨的。
先说说笔者的情况吧,其实笔者的问题很简单,两套log4j appender配置,⼀个输出的⽂件,⼀个控制台,⽂件的配置了utf-8编码,控制台没配置。现象,控制台正常,⽂件乱码。
把⽂件的改成gbk,不乱了。控制台改成gbk,乱码。控制台改成utf-8,正常。到这⾥你可能糊涂了。怎么这么乱?
其实道理很简单,乱码,⾃然是编码不匹配。什么匹配?log4j⽤utf-8输⼊,你⽂件是不是utf-8编码的呢?检查⼀下,果然不是,改成utf-8编码,解决。
switch case语句default你可能要问了,那控制台的匹配在哪⾥?Eclipse控制台也有是编码的,⽽且,不仅仅是有,你还可以为每个执⾏的程序,设置独⽴的编码。
⾃然,这⾥的编码匹配了,也就不会乱码了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论