我有一個從另一個腳本每分鐘調用一次的jar。在這個jar中,我創建了一個JavaLogger來記錄Jar運行時發生的情況。 JavaLogger寫入的日誌文件稱爲myLog.0。我有下面的代碼允許它去.1/.2/.3/.4。JavaLogger隨機寫入第二個文件
try {
FileHandler fileHandler = new FileHandler(filePath, 5242880, 5, true);
fileHandler.setFormatter(new java.util.logging.Formatter() {
@Override
public String format(LogRecord logRecord) {
return "[" + logRecord.getLevel() + " " + createDateTimeLog() + "] " + logRecord.getMessage() + "\r\n";
}
});
logger.addHandler(fileHandler);
} catch (IOException e) {}
所以我期望日誌會增長。但是,每隔一段時間日誌都會打印到myLog.0.1。我猜這是因爲文件被鎖定。然而,這從來沒有發生在我的罐子中期。它在jar運行的整個過程中記錄到.0.1。該文件仍然可以鎖定我以前的運行?
如果是這樣,我甚至試圖在Jar退出之前關閉處理程序。只有一個從罐出口點,我把下面的代碼之前正確的:
MyLogger.logger.getHandlers()[0].close();
我已經通過調試運行這個並沒有永遠只一個處理程序(我加的FileHandler)。
正如我所說的,這只是隨機發生的。罐子的前3次運行可以是.0,然後是第四次運行到.0.1。然後下一個10可能再次正確。這很難說。然而它確實發生得相當頻繁(我會說它大約每1/8次寫入.0.1)。
任何想法/建議將是偉大的。提前致謝。
對不起,遲到的迴應。我不得不繼續這個項目,直到現在沒有時間重新討論這個問題。無論如何,你對此似乎是正確的。 我有一次運行的jar的多個實例。然後,當他們嘗試訪問日誌時,它將被鎖定並寫入.0,.1等。 我考慮過使用文件鎖(java.nio.channels)。不過,我似乎無法讓它與日誌文件一起工作。關於我應該從哪裏出發的任何想法? –
我更新了答案。如果你需要併發的JVM,那麼代理處理程序就是要走的路。如果您需要,我可以包含一些示例代碼。 – jmehrens