Ruby的Timeout :: timeout系统引发了异常,因此陷阱所有异常(而不仅仅是错误)的代码将破坏该机制。
Logger会捕获编写消息时发生的所有异常,并且不会重新引发任何异常,因此日志繁重的程序可能会默默地吞下超时异常并继续运行。我已经提交了一份错误报告。
我需要快速修复。我的想法是这样做:
有更好的方法吗?
为了清晰起见编辑:我正在调用Timeout :: timeout块内的Logger。例如,此代码可能不会超时:
Timeout::timeout(1) {
while true {
@logger.debug("Hi world")
}
}
超时通过提出异常来起作用。我们都知道“救援异常”很糟糕。好吧,Logger将其文件写入“rescue Exception”,并且不再重新加注。因此它会捕获Timeout异常。