2016-03-04 56 views
2

我爲我的Java應用程序設置了一個標準的logrotate樣式的Log4j記錄器。爲此,我有幾個RollingFileAppender s(項目的每個「子單元」)輸出到應用程序文件夾中的日誌文件。我已經設置了大小限制,然後滾動到100MB。在Linux上,這可以完美工作,日誌在達到100 MB後會翻轉。Log4j RollingFileAppender在Linux上滾動,但在Windows上不滾動

但是,在Windows上,日誌文件只是保持增長並且不會翻轉。

我已閱讀this Stackoverflow post在同一個JVM(或多個JVM)上使用同一個日誌文件的多個Java應用程序將導致Log4j失敗翻轉,因爲多個進程具有對該文件打開的文件描述符 - 但在我的情況下顯然不是問題,因爲我使用單個 Java應用程序單個 JVM。

請注意,日誌文件未在任何其他進程中打開。

任何人都可以提供更多的洞察到什麼可能會導致此/建議的解決方法?

+0

請問您可以發佈您的相關log4j配置。 – SubOptimal

+0

我在運行時動態設置'RollingFileAppender's - 爲了使日誌文件路徑相對於軟件的安裝路徑,我需要這個。 – Pickle

回答

0

根據The Complete Log4j ManualCekiGülcü

可以在同一個JVM日誌運行到同一文件的多個附加目的地?

答案是否定的。出於性能和其他技術原因,log4j不會在appender之間執行任何同步。在多個appender中有相同 JVM記錄到同一個文件與多個appender在不同 JVMs登錄到同一個文件沒有多大區別。

鑑於上述情況,一種解決方案是創建一個單一的RollingFileAppender並將其連接到根記錄器,即

// Set up the RollingFileAppender 
RollingFileAppender rollingAppender = new RollingFileAppender(); 
rollingAppender.setFile(logfileURL); 

... (set up your appender here) 

// Attach it to the root logger 
LogManager.getRootLogger().addAppender(rollingAppender); 

的Log4j現在有沒有多的文件描述符的問題,並會記錄一切從所有來源到單個日誌文件。