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

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

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

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

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

该过程完全自动化,并无缝扩展到RollingFileAppender 。 另见优雅恢复。

更个性化的说法,优雅的恢复是我最喜欢的回归function之一。

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

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

2个实物期权:

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

  • + – 减少日志记录

磁盘已满,就像OOM一样,你无法知道什么在接到它时失败了。 处理内存(或磁盘)是为了防止它。 可能存在许多需要额外磁盘空间且任务失败的情况。