Log4J 2 Syslog Appender 无法正常工作

Posted

技术标签:

【中文标题】Log4J 2 Syslog Appender 无法正常工作【英文标题】:Log4J 2 Syslog Appender not working properly 【发布时间】:2016-06-14 18:15:00 【问题描述】:

我目前正在开发一个 java 日志转发器,它将消息记录到远程系统日志服务器。使用官方 Log4J2 手册,我使用通过 ConfigurationBuilder 工厂配置的 SyslogAppender 编写了代码。它适用于 UDP。 但是对于 TCP,它是一种缓冲所有消息的方式,一旦程序终止,它会立即将所有日志消息作为单个日志消息刷新。我尝试设置 immediateFlush 字段,但没有用。

【问题讨论】:

您对问题的解释很好,但在这种情况下,您还需要包含实际代码(您在其中解释)。这样做会让我们所有人都清楚地了解您正在使用什么。 SyslogAppender 使用的 TcpSocketManager 直接写入 Socket 的 OutputStream。每次写入后都会在 OutputStream 上调用 immediaFlush flush(),因此除非有 OS 缓冲正在进行,否则应立即写入数据。 您使用的是哪个版本的 Log4j 2?您可能想在 Log4j 问题跟踪器上提出 Jira 票证。 您好,我也遇到了同样的问题,您找到解决方案了吗?我正在使用 log4j 2.14。谢谢 【参考方案1】:

在 Syslog 定义中使用 newLine="true" 布尔值对我有用。

例子:

<Syslog name="LogStashSysLog" host="localhost" port="9998" protocol="TCP" newLine="true"/>

【讨论】:

以上是关于Log4J 2 Syslog Appender 无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

如何让 log4j syslog appender 在一行中写入堆栈跟踪?

Mac 上的 Log4j2 Syslog Appender 格式

Log4j2 Syslog Appender 添加垃圾字段

Weblogic 12C 将日志发送到 syslog

Logback 的 Syslog Appender

log4j输出文件位置