Mac 上的 Log4j2 Syslog Appender 格式

Posted

技术标签:

【中文标题】Mac 上的 Log4j2 Syslog Appender 格式【英文标题】:Log4j2 Syslog Appender formatting on Mac 【发布时间】:2014-09-19 01:57:58 【问题描述】:

我在 Mac (OSX 10.9.2) 上遇到 log4j2 的 SyslogAppender 问题。 log4j2 发送到 syslog 的默认格式导致消息解析不正确。我的配置:

<Syslog name="Syslog" host="localhost" port="514"
 protocol="UDP" format="RFC5424" appName="MyApp" id="log4j2-test"
 mdcIncludes="Priority,Logger,Exception,Message" newLine="true"> 
</Syslog>

当我跑步时:

syslog -F raw

我得到以下信息:

[ASLMessageID 1291756] [Time 1411090836] [TimeNanoSec 0] [Level 6] [PID 4294967295] [UID 4294967294] [GID 4294967294] [ReadGID 80] [Host 1] [Sender 2014-09-19T01] [Facility local0] [Message 40:36.481Z Mario.local MyApp - - - Hello, world!]

没有原始格式的相同消息显示如下:

Sep 19 09:40:36 1 2014-09-19T01[4294967295] <Info>: 40:36.481Z Mario.local MyApp - - - Hello, world!

根据日期字符串在两个位置之间的拆分方式,log4j2 SyslogAppender 使用的默认格式如下:

%d <host> <app> - - - %m

而且 syslog 正在错误地拆分所有内容。发件人不应该是日期字符串的第一部分,消息不应该是消息的其余部分。

我找不到更改 SyslogAppender 格式字符串的方法,因为在其中添加 PatternLayout 元素会被忽略。我还研究了此处提出的 LoggerFields 解决方案:log4j2 - Syslog appender and PatternLayout,这只会使 Message 元素进一步复杂化,而不会解决发送者不正确的问题。

有谁知道如何调整 log4j2 的 SyslogAppender 以便将格式正确的消息发送到 OSX 10.9.2 的 syslog?

【问题讨论】:

【参考方案1】:

我建议在 log4j2 Jira 问题跟踪器上将此作为功能请求提出:http://logging.apache.org/log4j/2.x/issue-tracking.html

【讨论】:

以上是关于Mac 上的 Log4j2 Syslog Appender 格式的主要内容,如果未能解决你的问题,请参考以下文章

log4j2 syslog 数据报大小超过 UDP 的限制

log4j2 和 syslog,使用 RFC5424 格式不显示日志消息的可变参数部分

Log4j2 Syslog Appender 添加垃圾字段

log4j2 - Syslog 附加程序和 PatternLayout

将 Apache Storm Log4j2 syslog appender 从 UDP 更改为 TCP

Java Log4j2 Syslog Appender 不发送消息