[英]Log4j RollingFileAppender rolls on Linux, but not on Windows
我正在為Java應用程序設置標准的logrotate樣式Log4j記錄器。 為此,我有幾個RollingFileAppender
(用於項目的每個“子單元”),輸出到應用程序文件夾中的日志文件。 在設置為100MB之前,我已經設置了大小限制。 在Linux上,這可以完美地工作,並且日志在達到100 MB之后會被翻轉。
但是,在Windows上,日志文件只會繼續增長並且不會滾動。
我在此Stackoverflow帖子中已經讀到,使用同一日志文件的同一JVM(或多個JVM)上的多個Java應用程序將導致Log4j失敗,因為多個進程對該文件打開了文件描述符-但在我的情況下,這很明顯這不是問題,因為我在單個 JVM上使用了單個 Java應用程序。
請注意,該日志文件在任何其他過程中均未打開。
任何人都可以對導致此/建議解決方法的原因提供更多的見解嗎?
根據CekiGülcü撰寫的 《完整Log4j手冊》 :
可以在同一JVM中運行的多個追加程序記錄到同一文件嗎?
答案是不。 由於性能和其他技術原因,log4j在附加程序之間不執行任何同步。 在同一 JVM中將多個追加程序記錄到同一文件與在不同 JVM中將多個追加程序記錄到同一文件沒有太大區別。
鑒於以上所述,一種解決方案是創建一個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現在將沒有多文件描述符問題,並將所有來源的所有內容記錄到單個日志文件中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.