Java Log4J是否能够从磁盘已满恢复?

Java Log4J是否能够从磁盘已满恢复?,java,log4j,Java,Log4j,我们有几个java应用服务器在这里运行,有几个应用程序。它们都使用Log4J登录到同一个文件系统中,我们只是出于这个原因创建了这个文件系统。 有时会出现文件系统空间不足,应用程序无法正常运行的情况 log4j:ERROR Failed to flush writer, java.io.IOException 不幸的是,Log4J无法从该错误中恢复,因此即使在文件系统中释放空间后,也不会从该应用程序中写入更

我们有几个java应用服务器在这里运行,有几个应用程序。它们都使用Log4J登录到同一个文件系统中,我们只是出于这个原因创建了这个文件系统。 有时会出现文件系统空间不足,应用程序无法正常运行的情况

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

不幸的是,Log4J无法从该错误中恢复,因此即使在文件系统中释放空间后,也不会从该应用程序中写入更多日志。除了重新启动应用程序外,还有什么选项(编程或设置)可以让Log4J重新运行吗?

您认为什么是可以接受的结果?我会考虑写一个新的附加器来包装任何一个正在访问磁盘的附加器,当它检测到异常时,试着做一些有意义的事情。也许可以让它将底层的appender write方法包装在try-catch块中,并向您或系统管理员发送电子邮件。

限制日志的大小,尝试使用自定义appender将日志归档到具有大量磁盘空间的备份机。

我没有对此进行测试,但美国国家网站:

从I/O故障中正常恢复

Logback的FileAppender及其所有子类,包括 RollingFileAppender,可以从I/O故障中正常恢复。因此 如果文件服务器暂时出现故障,则不再需要重新启动 应用程序只是为了让日志重新工作。一旦文件 服务器恢复后,相关的回写追加器将透明地 并从以前的错误条件中快速恢复


我假设上述情况也是如此。

根据我从错误中收集的信息,错误被抛出一次,然后就结束了。我希望的是,尽管错误只抛出一次,但appender会继续尝试写入该文件系统。。。也许有5分钟的停顿。。。好像包装器周围的包装是一个可行的想法。如果你使用OnlyOnceErrorHandler,你可以考虑使用FaleBeReRebug处理程序()。这样,当第一个追加器无法再写入时,您可以指定第二个追加器(可能是电子邮件追加器)。这将处理很多包装会做的事情。