如何禁用rake任务的日志记录?

时间:2011-04-25 22:22:39

标签: ruby-on-rails ruby-on-rails-3 rake

我有一个rake任务,每天一次作为cron作业运行。它对当前具有57k +记录的模型执行一些维护。每次运行任务时,无论目前处于何种环境,都会在日志中添加数十万行。(目前它正在开发中。)

如何禁用特定rake任务或任务组的日志记录,但是为应用程序的其余部分保留单独的日志记录,并将其留给从任务调用的模型/方法?

4 个答案:

答案 0 :(得分:30)

Rails记录器是ActiveSupport::BufferedLogger对象,但可以重新分配给您希望的任何其他类型的Logger对象(或响应Logger方法的任何对象) ,包括这样的事情:

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

将这些行放在Rake任务的顶部,所有日志记录输出都会以低成本的价格发送到/dev/null,最好通过Wikipedia文章进行解释。

答案 1 :(得分:3)

如果你有一个cron作业,你可以将输出重定向到/ dev / null,如:

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

答案 2 :(得分:3)

您可以将其添加到任务的顶部:

ActiveRecord::Base.logger.level = 2

答案 3 :(得分:0)

另一种可能性是拥有一个正在检查环境变量的配置

# production.rb

Rails.application.configure do
  #...
  config.log_level = ENV["RAILS_LOG_LEVEL"].presence || :debug # default level

end

然后,您可以运行以所需级别为前缀的任何内容

$> RAILS_LOG_LEVEL=info bin/rake my:rake:task