我已將Resque添加到我的Rails 3項目中。我創建了一個從DB讀取/寫入一些內容的工作。記錄Resque的問題
問題是我沒有看到SQL查詢日誌,如「Post Load(0.5ms)SELECT」posts「。* FROM」posts「」in the terminal again。我也沒有看到我設置的任何Rails.logger消息。
當我發出另一個請求(簡單刷新)時,記錄器消息和SQL查詢日誌突然出現。
任何想法可能會發生什麼?謝謝
我已將Resque添加到我的Rails 3項目中。我創建了一個從DB讀取/寫入一些內容的工作。記錄Resque的問題
問題是我沒有看到SQL查詢日誌,如「Post Load(0.5ms)SELECT」posts「。* FROM」posts「」in the terminal again。我也沒有看到我設置的任何Rails.logger消息。
當我發出另一個請求(簡單刷新)時,記錄器消息和SQL查詢日誌突然出現。
任何想法可能會發生什麼?謝謝
Rails不會立即寫入日誌文件,它會在刷新文件之前等待一定數量的行。你可以告訴Rails總是加給你的development.rb
或application.rb
文件清空日誌...
config.logger.auto_flushing = true
永遠只能做到這一點的發展,從來沒有這種生產,因爲它會殺了你的I/O 。
你也可以做到這一點與需求...
Rails.logger.flush
這裏API文檔...
http://api.rubyonrails.org/classes/ActiveSupport/BufferedLogger.html#method-i-auto_flushing-3D
Resque將不刷新記錄的生產模式(除非你的作業正在生成超過1000行日誌)。
您將不得不刷新生成的每一行日誌。我只配置resque與文件的lib /任務/ resque.rake:
task "resque:setup" => :environment do
Resque.before_first_fork = Proc.new { Rails.logger.auto_flushing = 1 }
end
我們經歷了同樣的問題,在我們的項目之一。此外,我們還想將所有Resque消息記錄到單獨的日誌文件中。
在博客文章Enable immediate log messages of resque workers中,可以找到一個代碼示例以啓用立即記錄到單獨的文件。
ActiveSupport :: BufferedLogger#auto_flushing現在已在Rails 3.2上被棄用。說明是在底層文件句柄上設置同步級別,或者調整文件系統。 FS緩存現在控制着沖洗。 file = File.open('foo.log','w') file.sync = true ActiveSupport :: BufferedLogger.new文件 – plainjimbo
格式化非常麻煩,你可以在文檔「棄用」部分 - https://github.com/lifo/docrails/blob/master/railties/guides/source/3_2_release_notes.textile – plainjimbo
@Jimbo - 該棄用郵件的問題是,我不知道「設置底層文件句柄同步級別「的含義。 –