集中式 Java 日志记录

我正在寻找一种方法来集中分布式软件(用Java编写)的日志记录问题,这将非常容易,因为有问题的系统只有一个服务器。但请记住,将来很可能会运行更多特定服务器的实例(并且需要更多应用程序),因此必须有类似于日志记录服务器的东西,它负责处理传入的日志并使其可供支持团队访问。

现在的情况是,几个java应用程序使用log4j将其数据写入本地文件,因此,如果客户端出现问题,支持团队必须要求提供日志,这并不总是那么容易,需要花费大量时间。在服务器故障的情况下,诊断问题并不大,因为无论如何都有远程访问,但即使通过日志记录服务器监视所有内容仍然很有意义。

当我浏览有关“集中式日志记录”的问题时,我发现了另一个问题(实际上是唯一一个具有(在这种情况下)可用答案的问题。问题是,所有应用程序都在封闭的环境中运行(在一个网络内),并且安全准则不允许任何与内部软件有关的内容从环境网络中传出。

我还发现了一篇关于如何实现这种日志记录服务器的精彩文章。由于这篇文章是在2001年写的,我本来以为有人可能已经解决了这个特定的问题。但我的搜索结果一无所获。

我的问题:是否有日志记录框架可以处理通过集中式服务器(支持团队可以访问)通过网络进行的日志记录?

规范:

  • 可用性
  • 服务器必须由我们运行。
  • Java 1.5 兼容性
  • 与异构网络的兼容性。
  • 最佳情况:协议使用HTTP发送日志(以避免防火墙问题)
  • 最佳情况:使用log4j或LogBack或任何实现slf4j的东西

没有必要,但很高兴有

  • 身份验证和安全性当然是一个问题,但至少可以退缩一段时间(如果它是开放软件,我们会将其扩展到我们的需求OT:我们总是回馈项目)。
  • 数据挖掘和分析对于使软件更好非常有帮助,但这也可以是一个外部应用程序。

我最糟糕的情况是没有这样的软件。在这种情况下,我们可能会自己实现它。但是,如果有这样一个客户端 - 服务器应用程序,我将不胜感激,而无需做这个特别有问题的工作。

提前致谢

更新:该解决方案必须在多个支持Java的平台上运行。(主要是Windows,Linux,一些HP Unix)

更新:经过更多的研究,我们实际上找到了一个我们能够获得的解决方案。clusterlog.net(至少从2015年年中开始脱机)为分布式软件提供日志记录服务,并与log4j和logback兼容(与slf4j兼容)。它使我们能够通过应用程序分析每个用户。因此,可以很容易地重现报告的错误(甚至是未报告的错误)。它还通过电子邮件通知我们重要事件,并有一个报告系统,将同一来源的日志汇总为易于访问的格式。他们几天前在这里部署了它(这是完美的),它运行得很好。

更新(2016):这个问题仍然获得大量流量,但我提到的网站不再存在。


答案 1

您可以将Log4j与SocketAppender一起使用,因此您必须将服务器部分编写为LogEvent处理。见 http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/net/SocketAppender.html


答案 2

NXLOGLogStashGraylogs2

LogStash + ElasticSearch (+可选 Kibana)

例:

1) http://logstash.net/docs/1.3.3/tutorials/getting-started-simple

2) http://logstash.net/docs/1.3.3/tutorials/getting-started-centralized


推荐