架设syslog服务器集中收集log4j 1.2.17日志之后,发现中文部分存在乱码。最先想到的无非就是log4j没有对UDP发包的编码,网上找了资料,可以配置发送到syslog,网上如是说: log4j.appender.syslog.Encoding=UTF-8
但是在log4j中配置后,发送到syslog的日志依旧是乱码。郁闷!
编写java程序监听本机udp默认514端口,再编写一个函数来判断接收字符的编码,接收发现,收到的UDP数据是GB2312本地编码的,我擦。。。log4j没根据配置文件给我干活儿啊。
下载log4j源码,通过SyslogWriter类发现,log4j发送到syslog的UDP包并无读取和应用配置文件中设定的编码,所以发送的数据包都是本地JDK默认编码。找到问题就好办,通过源码修正SyslogWriter类,加入UTF-8转化,终于解决Syslog中文乱码问题。