使用log4j 1.2 SyslogAppender在zookeeper日志中转义换行符

使用log4j 1.2 SyslogAppender在zookeeper日志中转义换行符,log4j,apache-zookeeper,syslog,rsyslog,Log4j,Apache Zookeeper,Syslog,Rsyslog,我正在运行ApacheZooKeeper 3.4.6,它反过来使用Log4J1.2.16。我将它的日志写入本地rsyslog服务器,这一切都很好。但是,当记录异常消息时,堆栈跟踪记录为多行消息,这会破坏我的syslog消息格式。这就好像SyslogAppender将每一行作为单独的syslog事件发送,这很奇怪,而且可能是错误的 我的log4j配置: log4j.appender.SYSLOG=org.apache.log4j.net.SyslogAppender log4j.appender.

我正在运行ApacheZooKeeper 3.4.6,它反过来使用Log4J1.2.16。我将它的日志写入本地rsyslog服务器,这一切都很好。但是,当记录异常消息时,堆栈跟踪记录为多行消息,这会破坏我的syslog消息格式。这就好像
SyslogAppender
将每一行作为单独的syslog事件发送,这很奇怪,而且可能是错误的

我的log4j配置:

log4j.appender.SYSLOG=org.apache.log4j.net.SyslogAppender
log4j.appender.SYSLOG.Threshold=INFO
log4j.appender.SYSLOG.SyslogHost=localhost
log4j.appender.SYSLOG.Facility=Local3
log4j.appender.SYSLOG.layout=org.apache.log4j.PatternLayout
log4j.appender.SYSLOG.layout.ConversionPattern={myhost} zookeeper %m (%c)
我的rsyslog模板:

template(name="LocalFormat" type="list") {
  property(name="timestamp" dateFormat="rfc3339")
  constant(value=" ")
  property(name="hostname")
  constant(value=" ")
  property(name="syslogtag")
  constant(value=" ")
  property(name="msg" spifno1stsp="on" )
  property(name="msg" droplastlf="on" )
  constant(value="\n")
}

$ActionFileDefaultTemplate LocalFormat
有问题的日志消息如下所示:

2015-10-16T18:07:29.023590+00:00 {myhost} zookeeper caught end of stream exception (org.apache.zookeeper.server.NIOServerCnxn)
2015-10-16T18:07:29.023669+00:00 localhost EndOfStreamException: Unable to read additional data from client sessionid 0x0, likely client has closed socket
2015-10-16T18:07:29.023763+00:00 localhost     at org.apache.zookeeper.server.NIOServerCnxn.doIO(NIOServerCnxn.java:228)
2015-10-16T18:07:29.023763+00:00 localhost     at org.apache.zookeeper.server.NIOServerCnxnFactory.run(NIOServerCnxnFactory.java:208)
2015-10-16T18:07:29.023763+00:00 localhost     at java.lang.Thread.run(Thread.java:745)
我本想避开新线,但是。但我对1.x不是很确定。在log4j1.2.x中有没有一种方法可以做到这一点,即使我不控制记录这些消息的源代码