log4j日志文件乱码怎么办,如何解决?

log4j日志文件乱码怎么办,如何解决?,第1张

解决方法如下:

如果是log4j.properties为配置文件,比如:

[c-sharp] view plaincopy

log4j.appender.A1=org.apache.log4j.RollingFileAppender

log4j.appender.A1.File=all.log

加入一行:

[c-sharp] view plaincopy

log4j.appender.A1=org.apache.log4j.RollingFileAppender

log4j.appender.A1.Encoding=UTF-8

log4j.appender.A1.File=all.log

如果是log4j.xml为配置文件,比如:

[c-sharp] view plaincopy

<appender name="A1" class="org.apache.log4j.RollingFileAppender">

<param name="File" value="all.log" />

......

</appender>

加入一行:

[c-sharp] view plaincopy

<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.properties配置文件需要在web.xml中配置一些信息,配置如下:

File文件的路径配置方法:

1.使用绝对路径,把日志文件放到一个固定的位置,例如D:/logs/log.log。

2.使用环境变量:

A: {user.home}/logs/log.log是把日志文件放到个人用户目录下,系统不同位置可能会有差异,以我的电脑系统(win10)和个人配置为例,${user.home}/logs/log.log代表C:\Users\kzhzhang\logs\log.log。

B: {catalina.home}/logs/error.log是把日志文件放到tomcat第一层目录下。

C: {webApp.root}/logs/error.log是把日志文件放到发布到tomcat下的项目内部,使用这个变量需要在web.xml中配置一些信息,配置如下,

3.设置一个监听器实现ServletContextListener,在项目启动的时候初始化日志保存目录:

在log4j.properties文件中使用log4jdir(变量名称可以随便命名,注意保持一致)变量配置日志文件位置,例如${log4jdir}/log.log,另外还需要在web.xml中配置监听器,配置如下:

ConversionPattern参数的格式含义

可能是程序中取的的是系统的默认编码,自己手动调用时,系统上下文的编码与 LZ 想要的编码一致,但是用 crontab 启动时,crontab 的系统上下文默认编码是 ISO-8859-1 之类的单字节字符编码,程序使用这个编码输出的中文就会变成问号。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/7790473.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存