由于这提到log4j2
bug报告,log4j2开发商编码的SyslogAppender作为SocketAppender硬连线到SyslogLayout
因为它旨在符合原始syslog格式或RFC5424。因此,不允许使用其他布局。
不幸的是,他们没有意识到RFC 5424规范并未对日志中包含的消息实施任何特定的格式,在Log4j2实现中只是
%m日志的一部分。
为了解决此问题,一种解决方案(在同一错误报告中建议)是使用SocketAppender内部的PatternLayout重现syslog格式,如下所示
<Socket name="SYSLOG" host="localhost" port="514" protocol="UDP"> <PatternLayout pattern="<1>%d{MMM dd HH:mm:ss} ${hostName} appName: { "host":"${hostName}", "thread":"%t", "level":"%p", "logger":"%c{1}", "line":%L, "message":"%enc{%m}", "exception":"%exception" }%n" /></Socket>这将通过UDP将格式正确的RFC5424日志写入本地514端口。以下是示例日志输出:
Sep 14 10:40:50 app-hostname app-name: { "host":"host-name-01", "thread":"http-nio-8080-exec-4", "level":"DEBUG", "logger":"ExecuteTimeInterceptor", "line":52, "message":"GET /health 200 served in 3", "exception":"" }


