当前位置: 首页 > 知识库问答 >
问题:

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

呼延高超
2023-03-14

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

共有1个答案

杨起运
2023-03-14

Log4j2被设计为审计日志框架。这意味着,如果日志记录对应用程序至关重要,如果日志记录失败,应用程序应该会失败,Log4j2可以实现这一点。

为此,所有内置附加器都有一个配置属性ignoreExceptions。从手册中:

默认值为true,导致在内部记录并忽略附加事件时遇到异常。当设置为false时,异常将传播到调用方。

然后考虑编写一个新的附加器,它覆盖了任何一个附加器访问磁盘,并试图在检测到异常时做一些有意义的事情。也许可以让它将底层的appender write方法包装在try-catch块中,并向您或系统管理员发送电子邮件。

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

如果它像预期的那样工作,那么你不应该在任何时候使用超过10GB的每个appender,因为log4j2也对滚动的文件使用一些压缩。

如。

<Policies>
   <SizeBasedTriggeringPolicy size="1 GB" /> 
...
<Policies>
...
<DefaultRolloverStrategy max="10"/>

如果java应用程序服务器运行多个应用程序。它们都使用Log4J登录到同一个文件系统中,该文件系统就是为此而创建的。有时会出现文件系统空间不足,应用程序无法正常运行的情况

log4j:ERROR Failed to flush writer,                                             
java.io.IOException

并且,您是否得到OOM错误(内存不足)取决于java堆的大小、您期望应用程序在单个事务中的日志量以及它应该写入多少数据块。

 类似资料:
  • 问题内容: 当我在Amazon EC2服务器上运行时,输出如下: 由于某种原因,某些东西正在耗尽我的存储空间。 我试图找到所有大文件/文件夹,这就是我得到的: 我怎么知道什么吞噬了我的存储空间? 问题答案: 好吧,我认为它的一个(或多个)日志文件太大了,需要删除/备份。我建议先处理大文件。因此,请查找所有大于的文件(10 MB足够大的文件大小,您可以为1MB同样选择+ 1M) 现在您可以找出造成问

  • 修剪docker时遇到了问题。构建映像后,我运行“docker系统修剪-卷-a-f”,但它不会从“/var/lib/docker/overlay2”释放空间。请参阅下面 在构建映像之前,请先释放磁盘空间 塑造形象 图像生成后的大小: 它只释放了122.2MB。修剪后的尺寸: 如您所见,共有0个容器/图像: 但是"/var/lib/docker/overlay2"的大小只从3.9G减少到3.7G。如

  • 问题内容: 一位同事提到他听说过一个轻量级的收藏集,当内容太满时会自动分页到磁盘上-但是他不记得这个名字了。我想它看起来像这样: 然后将x = 0推到x = 500到磁盘。关键是能够在不将整个内容加载到内存的情况下对其进行迭代。 这是针对具有少量内存的胖客户端。 有人知道吗(或类似的东西)? 问题答案: 好吧,我所知道的唯一具有这种功能的工具是流行系统:prevayler和space4j。尽管它们

  • 本文向大家介绍SQL Server获取磁盘空间使用情况,包括了SQL Server获取磁盘空间使用情况的使用技巧和注意事项,需要的朋友参考一下 对于DBA来说,监控磁盘使用情况是必要的工作,然后没有比较简单的方法能获取到磁盘空间使用率信息,下面总结下这些年攒下的脚本: 最常用的查看磁盘剩余空间,这个属于DBA入门必记的东西: xp_fixeddrives方式有点是系统自带,可直接使用,缺点是不能查

  • 本文向大家介绍RabbitMQ 集群中唯一一个磁盘节点崩溃了会发生什么情况?相关面试题,主要包含被问及RabbitMQ 集群中唯一一个磁盘节点崩溃了会发生什么情况?时的应答技巧和注意事项,需要的朋友参考一下 如果唯一磁盘的磁盘节点崩溃了, 不能进行以下操作: 不能创建队列 不能创建交换器 不能创建绑定 不能添加用户 不能更改权限 不能添加和删除集群节点 唯一磁盘节点崩溃了,集群是可以保持运行的,但

  • 问题内容: 我不知道我的Java进程发生了什么。此过程是一个索引过程。它从一组zip文件中读取文档,并将其添加到lucene索引中。GC日志显示它正在连续运行Full GC。 据我所能解释的这些行,前后对象的大小约为19M,但是为什么它一直都在运行呢? 线程转储如下所示: 从线程转储中,看起来好像2G烫发一代已经装满了。烫发真的需要那么多空间吗? 问题答案: 如果您的内存碎片化或没有任何清理余地,