许多Java应用程序的集中式日志记录:Syslog vs JMS vs Http vs本地文件

许多Java应用程序的集中式日志记录:Syslog vs JMS vs Http vs本地文件,java,logging,rest,jms,syslog,Java,Logging,Rest,Jms,Syslog,我希望我的所有应用程序日志都是集中的(最好是近实时的)。我们将使用Log4追加器。我应该使用哪一个: 在JMS队列中发送日志事件 Syslog/Syslog-ng 写入本地文件并使用rsync(每3秒)复制日志 向集中式REST Http服务发送POST 您使用的是哪一个?我不熟悉Log4(Log4j?),但它有数据库附加器吗?这将提供您需要的集中化,并消除任何复制日志的需要。取决于您的需求。日志记录到队列(如JMS中)为您提供了最灵活的选项,因为日志操作可以在日志消息写入队列后立即返回。然后,

我希望我的所有应用程序日志都是集中的(最好是近实时的)。我们将使用Log4追加器。我应该使用哪一个:

  • 在JMS队列中发送日志事件
  • Syslog/Syslog-ng
  • 写入本地文件并使用rsync(每3秒)复制日志
  • 向集中式REST Http服务发送POST

  • 您使用的是哪一个?

    我不熟悉Log4(Log4j?),但它有数据库附加器吗?这将提供您需要的集中化,并消除任何复制日志的需要。

    取决于您的需求。日志记录到队列(如JMS中)为您提供了最灵活的选项,因为日志操作可以在日志消息写入队列后立即返回。然后,您可以让另一个进程将这些日志消息从队列中删除,并将它们写入首选日志存储(数据库、文件系统等)


    (轻微的)缺点是,您的日志消息将稍微落后于正在记录的系统,但几乎总是这样,即使使用基于文件的日志记录也是如此。

    这在很大程度上取决于您想要什么。。不过,我不认为syslog是应用程序日志记录的好选择,它更适合基础设施日志。在不知道太多细节的情况下,您列出的4个选项看起来都不错。我们使用。

    这可能有点过分,但你看过吗?对于Java应用程序,我使用Log4J或SLF4J来记录文件,然后Splunk可以聚合日志并使其可搜索。

    顺便说一句,Log4J确实有一个使用队列和专用使用者线程从中记录日志的工具。

    您认为将字符串发送到远程系统日志比JMS+WMQ队列更快吗?我知道syslog ng可以确认消息的接收,然后执行到事件的其他路由(发送到文件、d.b、电子邮件等)。简单的回答是我不知道,但如果将syslog与使用持久消息的JMS解决方案进行比较,我可以看到syslog的速度更快。如果您不需要持久消息(可能丢失日志消息),那么您可以使JMS更快。最后,如果速度是一项要求,您需要衡量性能。