Как игнорировать ведение журнала запросов отложенных заданий при разработке на 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

Спасибо.


person Erik Nomitch    schedule 19.11.2013    source источник


Ответы (3)


Строка журнала все еще отображается, потому что эта строка регистрируется ActiveRecord, а не отложенным заданием. Дополнительную информацию см. В отчете об ошибке github. Вот обходной путь:

in 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
person Duarte Henriques    schedule 23.01.2014
comment
@MohamedElMahallawy Да, конечно. Он скрывает все Delayed::Backend::ActiveRecord::Job записи в вашем журнале. - person Dennis; 12.02.2015
comment
Это решение слишком агрессивно, отложенные задания не будут печатать много других сообщений. - person Ohad Dahan; 14.05.2016
comment
У меня работает на Rails 3 и DJ 4. На самом деле речь идет не о версии Rails, а о версии DJ, пока у вас есть резервный метод в классе Job, этот код просто маскирует его, отключая ведение журнала AR и активируя его. снова вокруг оригинальной реализации. - person hammady; 30.10.2016

Измените уровень журнала ActiveRecord только для отложенного задания. Это позволит вам увидеть другие журналы ActiveRecord.

Использовать:

Delayed::Backend::ActiveRecord::Job.logger.level = 1
person Niraj    schedule 03.10.2016
comment
Если у вас есть какая-либо другая информация о журнале обработки вашего задания (например, отправляемые электронные письма), вы не увидите его, если измените уровень журнала на 1. - person akaspick; 27.07.2020

Я думаю, вы можете установить уровень журнала в один, как показано ниже в инициализаторах. Это помогает мне игнорировать отложенную информацию о запросе задания из производственной среды, а также журнал разработки.

ActiveRecord :: Base.logger.level = 1

person pramod    schedule 12.09.2016