如何在Rails上的开发中忽略延迟作业查询日志记录

我如何从log / development.log中静音/忽略这些延迟作业查询日志?

Delayed::Backend::ActiveRecord::Job Load (1.0ms) UPDATE "delayed_jobs" SET locked_at = '2013-11-19 19:55:45.053991', locked_by = 'host:desktop-virtual pid:22277' WHERE id IN (SELECT id FROM "delayed_jobs" WHERE ((run_at <= '2013-11-19 19:55:45.053435' AND (locked_at IS NULL OR locked_at < '2013-11-19 15:55:45.053519') OR locked_by = 'host:desktop-virtual pid:22277') AND failed_at IS NULL) ORDER BY priority ASC, run_at ASC LIMIT 1 FOR UPDATE) RETURNING * Delayed::Backend::ActiveRecord::Job Load (1.4ms) UPDATE "delayed_jobs" SET locked_at = '2013-11-19 19:55:50.056977', locked_by = 'host:desktop-virtual pid:22277' WHERE id IN (SELECT id FROM "delayed_jobs" WHERE ((run_at <= '2013-11-19 19:55:50.056484' AND (locked_at IS NULL OR locked_at < '2013-11-19 15:55:50.056530') OR locked_by = 'host:desktop-virtual pid:22277') AND failed_at IS NULL) ORDER BY priority ASC, run_at ASC LIMIT 1 FOR UPDATE) RETURNING * 

我已经尝试将它添加到config/initializers/delayed_job.rb ,它会路由除了间隔查询日志之外的所有内容,这些日志仍然放在log/development.log

 if Rails.env == "development" Delayed::Worker.logger = Logger.new(File.join(Rails.root, "log", "delayed_job.log")) end 

谢谢。

日志行仍然显示,因为该行由ActiveRecord记录,而不是延迟作业。 有关详细信息,请参阅github错误报告 。 这是一个解决方法:

config/initializers/delayed_job_silencer.rb

 if Rails.env.development? module Delayed module Backend module ActiveRecord class Job class << self alias_method :reserve_original, :reserve def reserve(worker, max_run_time = Worker.max_run_time) previous_level = ::ActiveRecord::Base.logger.level ::ActiveRecord::Base.logger.level = Logger::WARN if previous_level < Logger::WARN value = reserve_original(worker, max_run_time) ::ActiveRecord::Base.logger.level = previous_level value end end end end end end end 

我认为您可以在初始化程序中将日志级别设置为1。 它帮助我忽略生产和开发日志中的延迟作业查询信息。

ActiveRecord :: Base.logger.level = 1

仅为延迟作业更改ActiveRecord日志级别。 这将允许您查看其他ActiveRecord日志。

使用:

 Delayed::Backend::ActiveRecord::Job.logger.level = 1