Java 需要HA Tomcat文件写入解决方案

Java 需要HA Tomcat文件写入解决方案,java,tomcat,logging,file-io,Java,Tomcat,Logging,File Io,我们在Apache后面的两个Tomcat实例上运行了一个简单的Webapp(使用mod\u proxy\u平衡器和mod\u proxy\u ajp的Tomcat HA设置)。webapp的作用是将传入的请求数据写入日志文件 假设每个tomcat实例都在它自己的JVM中运行,我们应该如何实现日志文件写入? 如果两个实例都可以写入同一个文件,这将是非常好的,但是Log4J似乎不支持这一点。我们愿意编写自己的文件编写器,但我不确定java.nio.channels.FileLock是否能满足我们的需

我们在Apache后面的两个Tomcat实例上运行了一个简单的Webapp(使用
mod\u proxy\u平衡器和
mod\u proxy\u ajp的Tomcat HA设置)。webapp的作用是将传入的请求数据写入日志文件

假设每个tomcat实例都在它自己的JVM中运行,我们应该如何实现日志文件写入?

如果两个实例都可以写入同一个文件,这将是非常好的,但是Log4J似乎不支持这一点。我们愿意编写自己的文件编写器,但我不确定
java.nio.channels.FileLock
是否能满足我们的需要

下面是带有ext3文件系统的Debian,所以如果我们用C甚至PHP来实现这一点,我们将使用文件系统锁。然而,Java是为了抽象底层系统而编写的,并且已经发展成了一堆多个包中的类,所有这些包都声称能够以某种方式编写文件。有人有什么建议吗?有什么可以帮助我们的软件包吗

首先想从两个JVM写入同一个文件只是一个愚蠢的梦吗?我肯定不是第一个

另一个要求是每小时滚动一次这些文件,但这并不是什么大问题(可能在文件创建时除外)


谢谢

简单地写入两个(或更多)日志文件,然后在滚动它们之后合并,这将是一个非常简单的解决方案

从两个或多个进程写入一个文件有各种各样的问题。锁定文件是一个相当粗粒度和重量级的解决方案


另一种方法可能是简单地将日志消息写入队列(JMS),让一个进程读取消息并写入单个日志文件。

简单地写入两个(或更多)日志文件,然后在滚动它们之后合并,这将是一种非常简单的解决方案

从两个或多个进程写入一个文件有各种各样的问题。锁定文件是一个相当粗粒度和重量级的解决方案


另一种方法可能是将日志消息写入队列(JMS),让一个进程读取消息并写入单个日志文件。

是的,我知道。。。但这意味着逻辑并非都在一个地方。。。我猜是赞成还是反对,什么逻辑?你在写日志文件,对吗?或者还有更多吗?+1对于队列概念,这样一来,当文件IO发生时,任何传入请求都不必等待您的webapp响应是的,我知道。。。但这意味着逻辑并非都在一个地方。。。我猜是赞成还是反对,什么逻辑?你在写日志文件,对吗?或者还有更多吗?+1对于队列概念,这样一来,当文件IO发生时,任何传入请求都不必等待您的webapp响应