• log4j输出日志乱码(转)


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

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

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

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


     

    转: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=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控制台也有是编码的,而且,不仅仅是有,你还可以为每个执行的程序,设置独立的编码。

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

  • 相关阅读:
    java学习笔记 --- 网络编程(网络的基础知识)
    java学习笔记 --- 多线程(线程安全问题——同步代码块)
    java学习笔记 --- 多线程(多线程的控制)
    java学习笔记 --- 多线程(多线程的创建方式)
    java学习笔记 --- 多线程(1)
    java学习笔记 --- IO流小结
    java学习笔记 --- IO(3)
    java学习笔记 --- IO(2)
    java学习笔记 --- IO(1)
    把测试错误的图像重新挑选出来进行测试
  • 原文地址:https://www.cnblogs.com/huanghongbo/p/6001219.html
Copyright © 2020-2023  润新知