Rails記錄器具有auto_flushing方法。它會延遲寫入日誌,直到條目數與所設置的條目數相同。這是自Rails 2以來一直存在的,它旨在通過停止在負載下持續寫入磁盤來加快速度。如何在進程死亡時寫入/清除Rails日誌
大多數情況下都很好,但是我們有短時間運行的作業,永遠不會停留足夠長的時間以便通過刷新 - 任何錯誤消失。
有什麼辦法可以保證日誌在進程死亡時被刷新?
編輯
最後,我這樣做(但它是非常詳細)
af = Rails.logger.auto_flushing
Rails.logger.auto_flushing = true
Rails.logger.error "my message"
Rails.logger.auto_flushing = af
這迫使該消息出來,但把汽車沖洗回之後
對於真正完整的解決方案把它放在初始化程序中:
class << Rails.logger
def flush_error(message)
Rails.logger.error message
Rails.logger.flush
end
end
然後只是使用方法,當...
我會在每次記錄器調用時都會發生刷新,但會導致性能下降(但如果您沒有記錄整個日誌,那麼可能會出現問題) – madlep 2011-05-25 11:01:15
這個* point *方法是隻在你想要的時候調用flush,就像你可能正在追查一個在進程終止之前沒有到達日誌中的生產問題 - 比如在一個resque任務中 – Ghoti 2011-05-25 19:47:19
OOC - 你實際上是否遇到過這種問題?當它發生時 - 流程是否拋出異常或者完全失敗? – 2011-05-30 10:18:53