【问题标题】:Log4j2 Syslog appender is not writing the 1st message to syslog after the syslog service is restarted重新启动 syslog 服务后,Log4j2 Syslog appender 未将第一条消息写入 syslog
【发布时间】:2022-01-31 19:40:09
【问题描述】:

我们已经将我们的应用程序配置为使用 Log4j2 的 Syslog appender 将一些特定的日志消息写入系统的 Syslog 文件。将系统日志写入文件没有问题。但是当重新启动 syslog 服务时,第一条日志消息不会写入 syslog。写入后续消息。

启用 Log4j 的调试日志,重启后将第一条消息写入 syslog 时没有看到异常。但是对于后续的请求,Log4j2 日志中捕获了以下消息。

2022-01-27 18:07:40,120 ajp-nio-0.0.0.0-8009-exec-3 DEBUG Reconnecting localhost/127.0.0.1:514
2022-01-27 18:07:40,121 ajp-nio-0.0.0.0-8009-exec-3 DEBUG Creating socket localhost/127.0.0.1:514
2022-01-27 18:07:40,122 ajp-nio-0.0.0.0-8009-exec-3 DEBUG Closing SocketOutputStream java.net.SocketOutputStream@1a769d7
2022-01-27 18:07:40,122 ajp-nio-0.0.0.0-8009-exec-3 DEBUG Connection to localhost:514 reestablished: Socket[addr=localhost/127.0.0.1,port=514,localport=57852]

我使用 threaddump 并检查了 Reconnector 线程是否正在运行,但 threaddump 中不存在这样的线程。我在这里一无所知,任何有关查找丢失消息原因的帮助都会有所帮助。

环境细节: CentOS 7.9 + RSyslog 服务, 应用程序部署在 Tomcat 中并在 Java 11 上运行, Log4j2 版本为 2.17.1

【问题讨论】:

    标签: java log4j2 rsyslog


    【解决方案1】:

    这是由于纯文本 TCP 系统日志的工作方式。查看this post 了解更多信息。

    从 8.1901 及更高版本开始,此“错误”就存在。

    据我所知,解决此问题的唯一方法是通过 RELP 协议发送消息。请参阅omrelp 模块。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多