【发布时间】:2011-09-03 09:00:19
【问题描述】:
如何在不更改任务源的情况下为每个 rake 任务创建数据库日志记录?我需要存储日期时间、任务名称、参数。是否有某种观察者等?
【问题讨论】:
标签: ruby-on-rails ruby logging rake
如何在不更改任务源的情况下为每个 rake 任务创建数据库日志记录?我需要存储日期时间、任务名称、参数。是否有某种观察者等?
【问题讨论】:
标签: ruby-on-rails ruby logging rake
你可以覆盖application.rb中的Rake::Task#invoke方法:
#application.rb
module Rake
class Task
alias_method :origin_invoke, :invoke if method_defined?(:invoke)
def invoke(*args)
logger = Logger.new('rake_tasks_log.log')
logger.info "#{Time.now} -- #{name} -- #{args.inspect}"
origin_invoke(*args)
end
end
end
rake test 的输出:
2011-05-27 16:57:42 +0300 -- test -- []
2011-05-27 16:57:42 +0300 -- test:units -- []
2011-05-27 16:57:51 +0300 -- db:test:load -- []
2011-05-27 16:57:51 +0300 -- db:schema:load -- []
2011-05-27 16:58:19 +0300 -- test:functionals -- []
2011-05-27 16:58:49 +0300 -- test:integration -- []
【讨论】:
origin_invoke 应该使用 *args 而不是 args,否则所有 args 将被包装在一个数组中并作为第一个任务参数传递(对于没有参数的任务 - 一切正常很好)。