我有一个rake任务,每天一次作为cron作业运行。它对当前具有57k +记录的模型执行一些维护。每次运行任务时,无论目前处于何种环境,都会在日志中添加数十万行。(目前它正在开发中。)
如何禁用特定rake任务或任务组的日志记录,但是为应用程序的其余部分保留单独的日志记录,并将其留给从任务调用的模型/方法?
答案 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