Java 从tomcat集群上的3个不同web应用程序进行日志记录

Java 从tomcat集群上的3个不同web应用程序进行日志记录,java,spring,tomcat,logging,log4j,Java,Spring,Tomcat,Logging,Log4j,我们的项目由3个通过web服务相互通信的web应用程序组成。 所有3个web应用程序都在3个不同的web服务器上运行,这些服务器作为一个带有负载平衡器的集群运行。(spring、tomcat、mysql) 我们的CTO提到,在生产中,在一个由所有webapplication日志文件组合而成的统一日志文件上发现日志错误非常有帮助 通过这种方式,很容易在日志中看到Web应用程序的整个流程,而不会从一个日志文件跳到另一个日志文件(对于每个Web应用程序日志) 经过快速研究,我们发现将所有日志合并到一个

我们的项目由3个通过web服务相互通信的web应用程序组成。 所有3个web应用程序都在3个不同的web服务器上运行,这些服务器作为一个带有负载平衡器的集群运行。(spring、tomcat、mysql)

我们的CTO提到,在生产中,在一个由所有webapplication日志文件组合而成的统一日志文件上发现日志错误非常有帮助

通过这种方式,很容易在日志中看到Web应用程序的整个流程,而不会从一个日志文件跳到另一个日志文件(对于每个Web应用程序日志)

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

基本上我们有三个问题:

1) 将所有web应用程序合并到一个日志中是一种好做法吗

2) 实现这一点的最佳方法是什么(无损坏的日志文件就好了)


3) 对tomcat日志执行相同的日志统一概念是否可能\相关?(统一同一集群中所有Tomcat的所有统一日志)

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

假设您使用的是Log4J,那么您应该检查JMS队列附加器:

使用此方法,每个服务器都将日志记录到一个JMS队列,您可以设置一个侦听器,该侦听器将日志记录到一个单独的服务器上的文件

一个合理的替代方案是执行一点Perl脚本来获取文件并定期或按需合并它们


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

只将错误记录到公共位置是很有用的。您可以继续登录到每个应用程序的日志,但可以为所选条目添加远程日志记录(例如,任何级别=错误的条目)

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


.

除了尝试自己的解决方案,您还可以尝试一些专门的产品,如或任何其他支持日志分析的监控工具。