2012-08-23 71 views
0

我有一個使用log4j日誌記錄框架的Java應用程序。在我的應用程序中,我有幾個模塊,每個模塊都創建自己的日誌文件。我通過命令行啓動我的應用程序,傳遞一個參數來告訴我的應用程序應該運行哪個模塊。 可以說我有3個模塊,所以每次啓動一個模塊時,所有3個日誌文件都正在創建,但只有一個充滿了信息(來自剛啓動的模塊)。 我有每個文件追加程序設置爲從Log4J FileAppender以編程方式訪問文件

...append = false 

,這樣每次我開始我的應用程序有沒有舊的日誌數據新鮮的日誌文件。

現在我有一個批處理文件創建一個進程鏈,因此所有3個模塊在批處理文件中緊跟在另一個之後。 但問題是: 最後,來自前兩個模塊的日誌文件是空的,只有最後一個模塊將其日誌存儲在正確的日誌文件中(當然,這必須是這樣,因爲我將append選項設置爲fasle對於每個文件appender)

我正在尋找以下解決方案: 當我啓動一個模塊,我想檢查這個模塊的日誌文件是否爲空。如果是,那麼我只是將日誌數據追加到這個文件。如果文件中已有數據,我想刪除存儲當前記錄數據的內容。 所以最後當我打電話給所有3個模塊時(每次使用不同參數啓動應用程序3次)我想要填充所有3個日誌文件。 有什麼建議嗎?

回答

0

每次運行程序模塊時,您想要的都是全新的日誌文件。

您是否考慮過使用RollingFileAppender?在您的RollingFileAppender的設置之後,您在程序開始時使用appender.rollOver();來創建新的日誌文件。您可以配置保留一些舊的日誌文件與appender.setMaxBackupIndex(int)任何舊的日誌文件正在被刪除。這將文件的管理委託給框架。

另一種方法是使用DailyRollingFileAppender。您可以配置文件翻轉的時間間隔。

+0

好的,謝謝你這是一個好主意。但是如果我不知道有多少模塊正在啓動呢?所以,如果我有3個模塊,那麼每個日誌文件將被創建3次,所以我將不得不將MaxBackupIndex設置爲3.但是在稍後的時間我使用了可變數量的模塊。 – Metalhead89

+0

每個模塊都使用它自己的Appender。所以你只能創建3個日誌文件一次。如果你重新啓動一個模塊,其他Appender不會翻轉。 – Simulant

+0

但我使用XML配置文件的設置,因爲我不想以編程方式創建appenders – Metalhead89

0

如果我的理解是正確的,則RollingFileAppender進行將創建3個日誌文件爲每個模塊(假設我開始3個模塊) 因此,可以說我有一個相應的日誌文件中的以下模塊括號:

Module 1: -import (import.log) 
Module 2: -parsing (parsing.log) 
Module 3: -deletion (deletion.log) 

啓動MODUL 1後,我將有以下文件+它們的大小:

import.log (size >0) 
parsing.log (empty) 
deletion.log (empty) 

目前啓動第二MODUL後我會:

import.log (empty) 
parsing.log (size >0) 
deletion.log (empty) 

當我將使用RollingFileAppender進行我想有以下開始第二模塊後:

import1.log (empty) 
import.log (size >0) 
parsing1.log (empty) 
parsing.log (size >0) 
deletion.log (empty) 

但我想有開始可用3個模塊的後2以下

import.log (size >0) 
parsing.log (size >0) 
deletion.log (empty) 
相關問題