2013-04-15 69 views
0

我試圖將stderrstdout存儲在我們的數據庫中,以用於我們後臺進程的未來調試目的。我還希望捕獲像透明代理一樣透明,我的意思是我希望仍然有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 

但它不工作那麼好。 :(

使用:Rails的3.2.11和3.0.23 Mongoid與DelayedJob

+0

請解釋「不好用」的含義。它可以工作嗎?出了什麼問題?是不是忘記調用'self.save'? – Leopd

+0

我節省後者,這是工作!我只是想在調用我的方法時看到調試信息,而不是等待結束,並保持記錄。 – Hartator

回答

0

從您的評論,這聽起來像你的問題是,你沒有結果流眼看到數據庫,因爲它們可以發生。但是,除了最後,你還沒有將文檔保存到數據庫中,所以...如果你想在流程結束之前看到數據庫中的結果,你必須增量寫入數據庫,

我建議您查看mongo的$push operator,您可以使用它來有效地將更多結果添加到文檔而無需重寫整個文檔,您可以將其與update命令,你可以使用通過moped這是mongoid的基礎。

或者,您可以使用日誌聚合器服務(如logentriesloggly)爲您節省大量工作。