Rails 记录器有 auto_flushing 方法。它会延迟写入日志,直到条目数与所设置的值相同。这自 Rails 2 以来就已经存在,旨在通过停止在负载下不断写入磁盘来加快速度。
这在大多数情况下都很好,但是我们有短期运行的作业,它们永远不会停留足够长的时间来通过刷新 - 任何错误都会消失。
有没有办法保证进程死掉时日志被刷新?
编辑
最后我这样做了(但是非常冗长)
af = Rails.logger.auto_flushing
Rails.logger.auto_flushing = true
Rails.logger.error "my message"
Rails.logger.auto_flushing = af
Run Code Online (Sandbox Code Playgroud)
这会强制消息输出,但之后会自动刷新
对于真正完整的解决方案,请将其放入初始化程序中:
class << Rails.logger
def flush_error( message )
Rails.logger.error message
Rails.logger.flush
end
end
Run Code Online (Sandbox Code Playgroud)
然后只需使用该方法...