0

我正在尝试将stderrand存储stdout在我们的数据库中,以便我们的后台进程将来进行调试。我还希望捕获像代理一样透明,我的意思是我希望仍然拥有stderrstdout输出到常规记录器以及我们的数据库之一。

我有这样的代码:

class Message

  include Mongoid::Document

  field :stdout
  field :stderr

  def enable_capture_output
    @previous_stderr, $stderr = $stderr, StringIO.new
    @previous_stdout, $stdout = $stdout, StringIO.new
  end

  def disable_and_save_captured_output
    self.stdout = $stdout.string
    self.stderr = $stderr.string
    $stderr = @previous_stderr
    $stdout = @previous_stdout
  end

end

但它的效果并不好。:(

使用:带有 DelayedJob 的 Rails 3.2.11 和 Mongoid 3.0.23

4

1 回答 1

0

从您的评论中,听起来您的问题是您没有看到正在发生的结果流到数据库。但是除了最后,您也不会将文档保存到数据库中。所以......如果您想在流程结束之前查看数据库中的结果,则必须在流程结束之前逐步写入数据库。

我建议查看 mongo 的$push运算符,您可以使用它来有效地将更多结果添加到文档中,而无需重写整个文档。您可以将它与update可以通过mongoid 基础的 moped使用的命令一起使用。

或者,您可以使用logentriesloggly等日志聚合器服务为自己节省大量工作。

于 2013-04-18T18:33:36.713 回答