Как отключить ведение журнала для задачи рейка?

У меня есть задача rake, которая запускается как задание cron один раз в день. Он выполняет некоторое обслуживание модели, в которой в настоящее время имеется 57k + записей. Это добавляет сотни тысяч строк в журнал каждый раз, когда задача выполняется для любой среды, в которой он сейчас находится. (В настоящее время он находится только в разработке.)

Как отключить ведение журнала для определенной задачи или группы задач, но оставить остальную часть протокола для остальной части приложения и оставить ее в покое для модели/методов, вызываемых из задачи?

Ответы

Ответ 1

Регистратор Rails является объектом ActiveSupport::BufferedLogger, но может быть переназначен любому другому типу объекта Logger (или любому объекту, который отвечает на методы Logger), который вы хотите, включая что-то вроде этого:

dev_null = Logger.new("/dev/null")
Rails.logger = dev_null
ActiveRecord::Base.logger = dev_null

Поместите эти строки в начало вашей задачи Rake, и все выходные данные журнала будут недорого отправлены на /dev/null, что лучше всего объяснить его статьей Wikipedia.

Ответ 2

Если у вас есть задание cron, вы можете перенаправить вывод в /dev/null, например:

* * * * * rake whatever_task_blah_blah > /dev/null 2>&1

Ответ 3

Вы можете добавить это в начало задачи:

ActiveRecord::Base.logger.level = 2