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

Eri*_*tch 14 logging ruby-on-rails delayed-job

我如何从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 *
Run Code Online (Sandbox Code Playgroud)

我已经尝试将其添加到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
Run Code Online (Sandbox Code Playgroud)

谢谢.

小智 22

日志行仍然显示,因为该行由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
Run Code Online (Sandbox Code Playgroud)