【问题标题】:HA Tomcat file writing solution needed需要HA Tomcat文件写入解决方案
【发布时间】:2010-11-18 11:31:52
【问题描述】:

我们有一个简单的 Web 应用程序在 Apache 后面的两个 Tomcat 实例上运行(一个使用 mod_proxy_balancermod_proxy_ajp 的 Tomcat HA 设置)。 webapp 的作用是将传入的请求数据写入日志文件。

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

如果两个实例都可以写入同一个文件,那就太好了,但似乎 Log4J 不支持。我们愿意编写自己的文件编写器,但我不确定 java.nio.channels.FileLock 是否会满足我们的要求。

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

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

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

谢谢!

【问题讨论】:

    标签: java tomcat logging file-io


    【解决方案1】:

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

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

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

    【讨论】:

    • 是的,我知道...但这意味着逻辑并非都在一个地方...我猜是利弊。
    • 什么逻辑?您正在写入日志文件,对吗?还是还有更多?
    • +1 表示队列的想法,这样任何传入的请求都不必等待文件 IO 发生以让您的 webapp 响应
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-11
    • 2016-03-31
    • 1970-01-01
    • 1970-01-01
    • 2023-01-26
    • 2017-10-02
    • 2015-06-04
    相关资源
    最近更新 更多