我希望我的所有应用程序日志都是集中的(最好是近乎实时的)。我们将使用 Log4 Appender。我应该使用哪一个:
- 在 JMS 队列中发送日志事件
- 系统日志/系统日志-ng
- 写入本地文件并使用 rsync(每 3 秒)复制日志
- 对集中式 REST Http 服务执行 POST
你用的是哪一个?
取决于你的要求。记录到队列(如在 JMS 中)为您提供了最大的选项灵活性,因为一旦将日志消息写入队列,您的日志操作就可以返回。然后,您可以自由地让另一个进程将这些日志消息从队列中取出,并将它们写入您首选的日志存储(数据库、文件系统......)。
(轻微的)缺点是您的日志消息将稍微落后于正在记录的系统,但这几乎总是如此,即使基于文件的日志记录也是如此。
这可能有点矫枉过正,但您看过Splunk吗?对于 Java 应用程序,我使用 Log4J 或 SLF4J 来记录文件,然后 Splunk 可以聚合日志并使其可搜索。
我不熟悉 Log4(Log4j?),但它有数据库附加程序吗?这将提供您需要的集中化,并消除复制日志的任何需要。
这在很大程度上取决于您想要什么。我认为 syslog 不是应用程序日志记录的好选择,但它更适合基础架构日志。在不了解太多细节的情况下,您列出的所有 4 个选项看起来都不错。我们用这个。
顺便说一句,log4j 确实有AsyncAppender,它使用队列和专用的消费者线程来记录日志