如何修复Ruby中的Timeout与Logger错误(Logger阻止Timeout)?

时间:2013-11-16 04:42:30

标签: ruby

Ruby的Timeout :: timeout系统引发了异常,因此陷阱所有异常(而不仅仅是错误)的代码将破坏该机制。

Logger会捕获编写消息时发生的所有异常,并且不会重新引发任何异常,因此日志繁重的程序可能会默默地吞下超时异常并继续运行。我已经提交了一份错误报告。

我需要快速修复。我的想法是这样做:

  • 将我自己的异常传递给Timeout :: timeout(第二个参数)。
  • 将logger.rb文件复制到我的代码库中,并使用它代替语言提供的记录器。
  • 修改记录器,以便在捕获超时异常时重新引发它。

    有更好的方法吗?

    为了清晰起见编辑:我正在调用Timeout :: timeout块内的Logger。例如,此代码可能不会超时:

    Timeout::timeout(1) {
      while true {
        @logger.debug("Hi world")
      }
    }
    

    超时通过提出异常来起作用。我们都知道“救援异常”很糟糕。好吧,Logger将其文件写入“rescue Exception”,并且不再重新加注。因此它会捕获Timeout异常。

  • 0 个答案:

    没有答案