登录时如何处理磁盘已满错误?

问题描述 投票:9回答:3

我正在使用slf4j + logback登录我们的应用程序。早些时候我们使用jcl + log4j并最近移动了。

由于我们的应用程序中存在大量日志记录,因此在生产环境中磁盘可能已满。在这种情况下,我们需要停止记录,应用程序应该正常工作。我在网上发现的是,我们需要轮询logback StatusManager以查找此类错误。但是这将为应用程序添加一个带有logback的依赖项。对于log4j,我发现我们可以创建一个Appender来停止在这种情况下登录。这将再次导致与log4j的应用程序依赖。

有没有办法只用slf4j配置它,还是有其他机制来处理这个?

java logging slf4j logback
3个回答
8
投票

您不必执行任何操作或配置任何内容。 Logback旨在很好地处理这种情况。一旦目标磁盘已满,logback的FileAppender将停止写入它一段短暂的时间。一旦延迟过去,它将尝试恢复。如果恢复尝试失败,则等待时间逐渐增加到最多1小时。如果恢复尝试成功,FileAppender将再次开始记录。

这个过程是完全自动的,可以无缝扩展到RollingFileAppender。另见graceful recovery.

更个人化的说法,优雅的恢复是我最喜欢的后退功能。


0
投票

您可以尝试扩展slf4j.Logger类,特别是info,debug,trace和其他方法,并在每次调用之前手动查询可用空间(通过File.getUsableSpace())。

这样您就不需要任何应用程序依赖


0
投票

2个实物期权:

  • 在linux上添加一个cron任务(或在Windows上预定一个)来清理你的混乱(包括gzip一些,如果需要的话)。
  • 购买更大的硬盘并手动执行维护
  • + - 减少日志记录

磁盘已满,就像OOM一样,你不知道什么在第一次失败时就会失败。处理内存(或磁盘)是通过阻止它。可能存在许多需要额外磁盘空间且任务失败的情况。

© www.soinside.com 2019 - 2024. All rights reserved.