Dor*_*old 14 java log4j syslog log4j2
我需要将事件记录到syslog中.我使用lo4j2和syslog appender.我的appenders阻止log4j2.xml看起来像这样:
<appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<Syslog name="syslog" host="localhost" port="514" protocol="UDP" charset="ISO-8859-1">
</Syslog>
<RollingFile name="AppLog" fileName="/var/log/app.log"
filePattern="/var/log/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
</Policies>
</RollingFile>
</appenders>
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我有一个Console appender和RollingFile appender以及一个特定的PatternLayout.我想为Syslog appender使用相同的PatternLayout.但是,syslog中的日志消息似乎总是使用预定义的布局.我试着做以下事情:
<Syslog name="syslog" host="localhost" port="514" protocol="UDP" charset="ISO-8859-1">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Syslog>
Run Code Online (Sandbox Code Playgroud)
但这没有任何影响.系统日志消息仍然具有相同的预定义格式.
如何确定进入syslog的日志消息的格式?
mic*_*mia 17
由于这提到log4j2 bug报告,log4j2开发商编码的SyslogAppender作为SocketAppender硬连线到SyslogLayout
因为它旨在符合原始syslog格式或RFC 5424.不允许其他布局.
遗憾的是,他们没有意识到RFC 5424规范没有对日志中包含的消息强制执行任何特定格式,而Log4j2实现中只是%m日志的一部分.
要解决这个问题,解决方案(在同一个bug报告中建议)是使用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>
Run Code Online (Sandbox Code Playgroud)
这将通过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":"" }
Run Code Online (Sandbox Code Playgroud)
小智 7
我不相信你可以在基本的Syslog appender上使用模式.
从文档中可以看出这一点
"SyslogAppender是一个SocketAppender,它将输出写入主机和端口指定的远程目标,格式符合BSD Syslog格式或RFC 5424" http://logging.apache.org/log4j/2.x /manual/appenders.html#SyslogAppender
但是,它确实允许您指定"format = RFC 5424"
如果您使用RFC 5424
然后,您可以将PatterLayout放在loggerFields参数中.见http://logging.apache.org/log4j/2.x/manual/layouts.html#RFC5424Layout
希望有所帮助!
| 归档时间: |
|
| 查看次数: |
22987 次 |
| 最近记录: |