我们在Apache后面的两个Tomcat实例上运行一个简单的Web应用程序(使用mod_proxy_balancer
和mod_proxy_ajp
进行Tomcat HA设置)。 webapp的作用是将传入的请求数据写入日志文件。
鉴于每个tomcat实例都在它自己的JVM中运行,我们应该如何实现日志文件的编写?
如果两个实例都可以写入同一个文件,那将是非常好的,但似乎Log4J不支持它。我们愿意编写自己的文件编写器,但我不确定java.nio.channels.FileLock
是否可以满足我们的要求。
下面是带有ext3文件系统的Debian,所以如果我们在C或甚至PHP中这样做,我们将使用文件系统锁。然而,Java被编写为抽象出底层系统,并且已经发展成为多个包中的一堆类,它们都声称能够以这种或那种方式编写文件。有人有建议吗?那里有没有可以帮助我们的套餐吗?
首先想要从2个JVM写入同一个文件,这只是一个愚蠢的梦想吗?当然,我不是第一个。
另一个要求是每小时滚动这些文件,但这不是问题(除了可能在文件创建时)。
谢谢!
答案 0 :(得分:3)
简单地写入两个(或更多)日志文件然后在滚动它们之后再合并它将是一个远远更简单的解决方案。
从两个或多个进程写入一个文件有各种各样的问题。锁定文件是一个相当粗糙和重量级的解决方案。
替代方法可能只是将日志消息写入队列(JMS)并让一个进程读取消息并写入单个日志文件。