Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在登录回写时处理磁盘已满错误?_Java_Logging_Slf4j_Logback - Fatal编程技术网

Java 如何在登录回写时处理磁盘已满错误?

Java 如何在登录回写时处理磁盘已满错误?,java,logging,slf4j,logback,Java,Logging,Slf4j,Logback,我正在使用slf4j+logback登录我们的应用程序。之前我们使用的是jcl+log4j,最近才移动 由于我们的应用程序中有大量日志记录,所以在生产环境中有可能磁盘已满。在这种情况下,我们需要停止日志记录,应用程序应该可以正常工作。我从网络上发现,我们需要对此类错误轮询logback StatusManager。但这将为应用程序添加一个带有logback的依赖项。 对于log4j,我发现我们可以创建一个Appender,在这种情况下停止登录。这将再次导致应用程序依赖于log4j 是否有方法仅使

我正在使用slf4j+logback登录我们的应用程序。之前我们使用的是jcl+log4j,最近才移动

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


是否有方法仅使用slf4j配置此功能,或者是否有其他机制来处理此功能?

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


这样,您就不需要任何应用程序依赖项,也不必执行或配置任何操作。Logback的设计可以很好地处理这种情况。一旦目标磁盘已满,logback的
FileAppender
将在短时间内停止写入。一旦延迟过去,它将尝试恢复。如果恢复尝试失败,等待时间将逐渐增加,最多1小时。如果恢复尝试成功,
FileAppender
将再次开始记录

该过程是完全自动的,可以无缝地扩展到
RollingFileAppender
。另见

就个人而言,优雅恢复是我最喜欢的logback功能之一。

2实物选项:

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

  • +-减少伐木


磁盘已满就像OOM一样,当捕获它时,您无法知道第一个失败的是什么。处理内存(或磁盘)不足的问题是通过阻止它。在很多情况下,可能需要额外的磁盘空间,但任务失败。

我很好奇,当磁盘已满时,当前会发生什么?slf4j/logback是否出现异常?我原以为日志库不会向您抛出任何异常。File.getUsableSpace()需要日志文件位置,该位置会根据部署的不同而有所不同。事件会被缓冲还是发生在磁盘已满时,丢失?IO故障期间生成的事件未被缓冲。日志中是否会有日志事件已被删除的通知?我们能否在磁盘已满之前停止?