【问题标题】:Logging from 3 different web applications on a tomcat cluster从 Tomcat 集群上的 3 个不同的 Web 应用程序记录日志
【发布时间】:2014-04-04 18:20:55
【问题描述】:

我们的项目由 3 个通过网络服务相互通信的网络应用程序组成。 所有 3 个 Web 应用程序都在 3 个不同的 Web 服务器上运行,这些 Web 服务器作为具有负载均衡器的集群运行。 (春天,tomcat,mysql)

我们的 CTO 提到,在生产环境中,在由所有 Web 应用程序日志文件组合在一起的单个统一日志文件中检查日志错误非常有帮助。

这样很容易在日志中看到整个 webapp 的流程,而不是从一个日志文件跳到另一个(对于每个 webapp 日志)

经过快速研究,我们发现将所有日志合并到一个文件中可能会导致日志文件本身的文件损坏错误。 (我们使用 slf4j 和 log4j 配置)

所以基本上我们有 3 个问题:

1) 将所有 Web 应用程序登录合并为一个是一种好习惯吗?

2) 实现这一目标的最佳方法是什么(未损坏的日志文件会很好)

3) 是否有可能对 tomcat 日志做同样的日志统一概念? (统一同一集群内所有tomcat的所有统一日志)

【问题讨论】:

  • 您可以尝试一些专门的产品,例如Logentries或任何其他支持日志分析的监控工具,而不是尝试提出自己的解决方案。

标签: java spring tomcat logging log4j


【解决方案1】:

只将错误记录到一个共同的地方是很有用的。您可以继续记录到每个应用程序的日志,但您可以为选定的条目添加远程日志记录(例如,Level=ERROR 的任何内容)。

最简单的设置方法是在您的一台机器上运行 SocketServer。

Here's an example that shows how to configure it.

【讨论】:

    【解决方案2】:

    从多个服务器登录到同一个文件会变得非常混乱。您不可避免地会导致多台服务器同时尝试更新文件,这会导致诸如奇怪的混合输出和锁定等问题。

    鉴于您使用的是 Log4J,那么您应该查看 JMS 队列附加程序:

    http://logging.apache.org/log4j/2.x/manual/appenders.html#JMSQueueAppender

    使用这个,每个服务器都记录到一个 JMS 队列,您可以设置一个监听器,将日志记录到一个单独的服务器上。

    一个合理的替代方法是编写一些 Perl 脚本来获取文件并定期或按需合并它们。

    您可能会发现彼此不同步的消息。这是因为每个服务器都会缓冲日志输出以避免阻塞您的应用程序进程。

    【讨论】:

      猜你喜欢
      • 2011-03-02
      • 1970-01-01
      • 1970-01-01
      • 2012-09-06
      • 1970-01-01
      • 2015-04-29
      • 2010-12-28
      • 1970-01-01
      • 2016-03-24
      相关资源
      最近更新 更多