有delayed_job日志"put",sql查询和作业状态

sam*_*tte 3 ruby logging ruby-on-rails

现在只记录以下内容logs/delayed_job.log:

2012-04-20T03:57:44+0000: Cacher completed after 5.3676
2012-04-20T03:57:44+0000: 1 jobs processed at 0.1744 j/s, 0 failed ...
Run Code Online (Sandbox Code Playgroud)

我正在尝试做的是让它也记录我puts和我的SQL查询,就像在开发模式下一样,除了它仍然被记录log/delayed_job.log.

我尝试添加以下initializers/delayed_job_config.rb但没有运气:

Delayed::Worker.logger = Rails.logger
Delayed::Worker.logger.level = Logger::DEBUG
Run Code Online (Sandbox Code Playgroud)

(我的所有内容puts现在都已记录,但没有更多的作业状态日志,仍然没有SQL查询)

Pet*_* P. 8

在Rails v3.2.13中,您可以:

Delayed::Worker.logger = ActiveSupport::Logger.new("log/delayed_job.log", Rails.logger.level)
Delayed::Worker.logger.auto_flushing = 1

#only reassign AR logger if we're in a delayed process(rake task or script/delayed_job)
if caller.last =~ /script\/delayed_job/ or (File.basename($0) == "rake" and ARGV[0] =~ /jobs\:work/)
  ActiveRecord::Base.logger = Delayed::Worker.logger
end
Run Code Online (Sandbox Code Playgroud)

但是...... ActiveSupport :: BufferedLogger已被弃用https://github.com/rails/rails/blob/master/activesupport/lib/active_support/buffered_logger.rb#L18

另外,您可能想要正确旋转日志?所以我认为这更好:

Delayed::Worker.logger = Logger.new("log/delayed_job.log", 5, 104857600)

if caller.last =~ /script\/delayed_job/ or (File.basename($0) == "rake" and ARGV[0] =~ /jobs\:work/)
  ActiveRecord::Base.logger = Delayed::Worker.logger
end
Run Code Online (Sandbox Code Playgroud)

构造函数说保留大约5个日志文件,并在当前日志文件达到100Mb时旋转.详情请见:http: //www.ruby-doc.org/stdlib-1.9.3/libdoc/logger/rdoc/Logger.html#method-c-new

感谢:http://www.heedspin.com/2011/01/17/delayed-job-logging.html获取灵感