log4j2磁盘空间已满时会发生什么

时间:2019-10-22 09:22:53

标签: java logging out-of-memory log4j2

我正在使用log4j2登录我的Java应用程序,该应用程序配置为将日志写入文件。磁盘空间已满时会发生什么? log4j2是否会缓冲日志,直到刷新磁盘为止?如果是,是否会导致OOM错误?

1 个答案:

答案 0 :(得分:2)

Log4j2被设计为审核日志记录框架。这意味着,如果日志记录对于您的应用程序至关重要,那么如果日志记录失败,则应用程序将失败,那么Log4j2可以完成此任务。

为此,所有内置的附加程序都具有配置属性Mono。来自manual

  

默认值为true,导致在追加事件时遇到的异常会在内部记录,然后被忽略。设置为false时,异常会传播到调用方。

然后考虑编写一个新的Appender,该Appender包装正在访问磁盘的附加程序,并在检测到IOExceptions时尝试执行明智的操作。也许可以将其基本的Appenders写方法包装在try-catch块中,然后向您或系统管理员发送电子邮件。


这个想法是要包含log4j2使用的所有可能的磁盘空间,就像JVM的最大堆一样。因此,您必须对所有附加程序使用基于大小的策略以及最大翻转。

如果它能按预期工作,则您每个应用程序在任何时候都不应使用超过10GB的空间,因为log4j2还在滚动文件上使用了一些压缩功能。

例如

.map

如果您有同时运行多个应用程序的Java应用程序服务器。他们都使用Log4J登录到同一文件系统,仅是出于这个原因而创建的。有时会发生文件系统空间不足而应用程序获取的情况

ignoreExceptions

以及是否会出现OOM错误(内存不足)取决于Java堆大小以及您对单个事务的应用程序期望的日志量以及应该写入多少数据块。