log4j输出日志乱码(转)

摘要:
传输:log4j日志文件乱码问题的解决方案最近,我使用log4j在AIX上打印日志。有乱码的日志。我已努力解决这个问题。症状:在Windows、Linux和Unix上,默认语言不是中文,日志用log4j打印,并且出现乱码。常见的问题是一堆问号。今天,我遇到了一个小问题。log4j输出文件乱码。控制台正常。在谷歌搜索后,几乎有人表示:在该项目中,log4j在英文版Linux下输出的中文日志是乱码的。由于log4j配置文件中未设置编码格式,因此log4j使用系统默认编码。Log4j是在utf-8中输入的。您的文件是在utf-8中编码的吗?

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

log4j输出日志乱码(转)第1张

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

免责声明:文章转载自《log4j输出日志乱码(转)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇DrawTextsvn 本地仓库使用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

JS中将控制台log输出显示到浏览器中

JS中将控制台log输出显示到浏览中 一、背景 有时候需要,将返回的请求数据打印在Chrome中的控制台中,方便对比数据,对比实际返回数据是否和API约定数据一致。这时需要在代码中添加console.log 片段,将数据限制在浏览器的控制台中。 二、操作 在代码添加需要返回的数据,并打印出来,在浏览器中查看。 (1)在代码中添加():...

Failed to bind properties under 'spring.datasource' to javax.sql.DataSource:

Springboot在更换数据源的为druid的时候,报错: Description: Failed to bind properties under 'spring.datasource'to javax.sql.DataSource: Property: spring.datasource.filters Value: stat,wall,log4...

EF Code First Migrations数据库迁移

1、EF Code First创建数据库   新建控制台应用程序Portal,通过程序包管理器控制台添加EntityFramework。   在程序包管理器控制台中执行以下语句,安装EntityFramework。   PM> Install-Package EntityFramework   安装成功后,界面提示如下图:      在新建的Port...

Quartz+log4net实现控制台程序定时运行,并且记录日志

c# 控制台程序定时运行,并记录日志。 组件Quartz +log4net Quartz定时运行程序,log4net记录日志。 首先建立控制台程序“QuartzTest” 安装Quartz、log4net这两个组件。如下图流程 安装Quartz 安装log4net 安装完毕后引用里多了如下 然后在项目中添加log4net.config 并将log...

Solr单机版的安装与部署(使用Tomcat)

一、硬件环境 假设有1台机,IP及主机名如下: 192.168.100.105 c1 二、软件环境 操作系统:Ubuntu Server 18.04 JDK:1.8.0 1.安装JDK https://www.cnblogs.com/live41/p/14235891.html 2.安装Tomcat https://www.cnblogs.com/live...

log4j实现日志自动清理功能

log4j不支持自动清理功能,但是log4j2版本支持,log4j2是log4j的升级版,比logback先进。 log4j升级为log4j2(不需要改动代码)https://blog.csdn.net/lisheng19870305/article/details/82911436使用Slf4j集成Log4j2构建项目日志系统的完美解决方案https:/...