gpt4 book ai didi

java - Log4j RollingFileAppender 在 Linux 上滚动,但在 Windows 上不滚动

转载 作者:可可西里 更新时间:2023-11-01 10:43:57 25 4
gpt4 key购买 nike

我正在为我的 Java 应用程序设置一个标准的 logrotate 风格的 Log4j 记录器。为此,我有几个 RollingFileAppender(一个用于项目的每个“子单元”)输出到应用程序文件夹中的日志文件。在滚动到 100MB 之前,我已经设置了大小限制。在 Linux 上,这非常有效,日志在达到 100 MB 后滚动。

但是,在 Windows 上,日志文件只会不断增长,不会滚动更新。

我已阅读 this Stackoverflow post同一 JVM(或多个 JVM)上的多个 Java 应用程序使用相同的日志文件将导致 Log4j 翻转失败,因为多个进程的文件描述符打开到该文件 - 但在我的情况下,这显然不是问题,因为我正在使用单个 单个 JVM 上的 Java 应用程序。

请注意,日志文件未在任何其他进程中打开。

任何人都可以更深入地了解可能导致此问题的原因/建议解决方法吗?

最佳答案

根据 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 - Log4j RollingFileAppender 在 Linux 上滚动,但在 Windows 上不滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35797218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com