2009-08-11 38 views
0

我們對後面的Apache 2個Tomcat實例(使用mod_proxy_balancermod_proxy_ajp Tomcat的HA設置)運行一個簡單的webapp。 webapp的作用是將傳入的請求數據寫入日誌文件。HA Tomcat的文件寫入解決方案所需

由於每個Tomcat實例是在它自己的JVM上運行,我們應該如何實現日誌文件的寫作?

這將是極好的,如果這兩種情況下可以寫入同一個文件,但它似乎Log4J的不支持。我們很樂意編寫我們自己的文件編寫器,但我不確定java.nio.channels.FileLock是否會按照我們的要求做。

底下是Debian中一個ext3文件系統,所以如果我們在C或甚至PHP這樣做,我們將使用的文件系統鎖定。然而,Java的編寫是爲了將底層系統抽象出來,並且已經成長爲多個包中的類的混亂,所有這些包都聲稱能夠以各種方式寫文件。有人有建議嗎?有沒有可以幫助我們的軟件包?

想要從2個JVM寫入同一個文件只是一個愚蠢的夢想嗎?當然,我不是第一個。

另一個要求是這些文件被軋每隔一小時,但就是沒有大問題(也許除了在文件創建時間)。

謝謝!

回答

3

這對於簡單地寫入兩個(或更多)日誌文件,然後在將它們滾動後再合併,將會是一種遠爲簡單的解決方案。

從兩個或多個進程寫入一個文件有各種問題。鎖定文件是一個相當粗糙和重量級的解決方案。

另一種可能僅僅是將日誌消息寫入到隊列(JMS),並具有一個過程讀出的消息並寫入一個日誌文件。

+0

是的,我知道......但它意味着邏輯不是全部在一個地方......我認爲利弊。 – 2009-08-11 00:49:23

+0

什麼邏輯?你正在寫日誌文件,對吧?或者還有更多嗎? – cletus 2009-08-11 01:05:22

+0

對隊列的想法+1,這樣任何傳入的請求不需要等待,而文件IO發生爲您的web應用程序響應 – 2009-08-11 01:30:29