【发布时间】:2011-04-25 22:22:38
【问题描述】:
我有一个 rake 任务,它每天作为 cron 作业运行一次。它对当前包含 57k+ 条记录的模型执行一些维护。每次针对当前所处的环境运行任务时,这都会在日志中添加数十万行。(目前它只是在开发中。)
如何禁用特定 rake 任务或任务组的日志记录,但不为应用程序的其余部分单独记录日志,而对于从任务调用的模型/方法不单独记录?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 rake
我有一个 rake 任务,它每天作为 cron 作业运行一次。它对当前包含 57k+ 条记录的模型执行一些维护。每次针对当前所处的环境运行任务时,这都会在日志中添加数十万行。(目前它只是在开发中。)
如何禁用特定 rake 任务或任务组的日志记录,但不为应用程序的其余部分单独记录日志,而对于从任务调用的模型/方法不单独记录?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 rake
Rails 记录器是一个ActiveSupport::BufferedLogger 对象,但可以根据需要重新分配给任何其他类型的Logger 对象(或任何响应Logger 方法的对象),包括以下内容:
dev_null = Logger.new("/dev/null")
Rails.logger = dev_null
ActiveRecord::Base.logger = dev_null
将这些行放在您的 Rake 任务的顶部,所有日志记录输出都会以低廉的成本发送到 /dev/null,这在其 Wikipedia 文章中得到了最好的解释。
【讨论】:
photos WHERE (photos.album_id = 16616519)
Logger.new(nil) 工作正常。
您可以将其添加到任务的顶部:
ActiveRecord::Base.logger.level = 2
【讨论】:
如果你有一个 cron 作业,你可以将输出重定向到 /dev/null 像:
* * * * * rake whatever_task_blah_blah > /dev/null 2>&1
【讨论】:
另一种可能性是有一个正在检查环境变量的配置
# 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
【讨论】: