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

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

  • 相关阅读:
    DC中为什么要用Uniquify?
    hdu 1596 find the safest road
    hdu2112 HDU Today
    hdu 2066 一个人的旅行
    poj 3026 Borg Maze
    poj 1979 Red and Black
    poj 1321 棋盘问题
    hdu 1010 Tempter of the Bone
    hdu 4861 Couple doubi
    codeforces584B Kolya and Tanya
  • 原文地址:https://www.cnblogs.com/huanghongbo/p/6001219.html
Copyright © 2020-2023  润新知