Log4j RollingFileAppender 在 Linux 上滚动,但不在 Windows 上滚动
Log4j RollingFileAppender rolls on Linux, but not on Windows
我正在为我的 Java 应用程序设置一个标准的 logrotate 风格的 Log4j 记录器。为此,我有几个 RollingFileAppender
输出到应用程序文件夹中的日志文件(每个 "sub-unit" 项目一个)。在滚动到 100MB 之前,我已经设置了大小限制。在 Linux 上,这完美地工作并且日志在达到 100 MB 后滚动。
但是,在 Windows 上,日志文件一直在增长,不会滚动更新。
我在 this Whosebug post 中读到,同一个 JVM(或多个 JVM)上的多个 Java 应用程序使用同一个日志文件将导致 Log4j 翻转失败,因为多个进程打开了文件描述符到那个文件 - 但在我的情况下这显然不是问题,因为我在 a single JVM 上使用 a single Java application .
请注意,日志文件未在任何其他进程中打开。
任何人都可以更深入地了解可能导致 this/suggest 解决方法的原因吗?
根据 The Complete Log4j Manual Ceki Gülcü 的说法:
Can multiple appenders running in the same JVM log to the same file?
The answer is no. For performance and other technical reasons, log4j does not perform any synchronization between appenders. Having multiple appenders in the same JVM logging to the same file is not much different from having multiple appenders in different JVMs logging to the same file.
鉴于上述情况,一种解决方案是创建一个 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 现在没有多文件描述符问题,并且会将所有来源的所有内容记录到单个日志文件中。
我正在为我的 Java 应用程序设置一个标准的 logrotate 风格的 Log4j 记录器。为此,我有几个 RollingFileAppender
输出到应用程序文件夹中的日志文件(每个 "sub-unit" 项目一个)。在滚动到 100MB 之前,我已经设置了大小限制。在 Linux 上,这完美地工作并且日志在达到 100 MB 后滚动。
但是,在 Windows 上,日志文件一直在增长,不会滚动更新。
我在 this Whosebug post 中读到,同一个 JVM(或多个 JVM)上的多个 Java 应用程序使用同一个日志文件将导致 Log4j 翻转失败,因为多个进程打开了文件描述符到那个文件 - 但在我的情况下这显然不是问题,因为我在 a single JVM 上使用 a single Java application .
请注意,日志文件未在任何其他进程中打开。
任何人都可以更深入地了解可能导致 this/suggest 解决方法的原因吗?
根据 The Complete Log4j Manual Ceki Gülcü 的说法:
Can multiple appenders running in the same JVM log to the same file?
The answer is no. For performance and other technical reasons, log4j does not perform any synchronization between appenders. Having multiple appenders in the same JVM logging to the same file is not much different from having multiple appenders in different JVMs logging to the same file.
鉴于上述情况,一种解决方案是创建一个 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 现在没有多文件描述符问题,并且会将所有来源的所有内容记录到单个日志文件中。