【问题标题】:Rake: logging any task executingRake:记录任何正在执行的任务
【发布时间】:2011-09-03 09:00:19
【问题描述】:

如何在不更改任务源的情况下为每个 rake 任务创建数据库日志记录?我需要存储日期时间、任务名称、参数。是否有某种观察者等?

【问题讨论】:

    标签: ruby-on-rails ruby logging rake


    【解决方案1】:

    你可以覆盖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 将被包装在一个数组中并作为第一个任务参数传递(对于没有参数的任务 - 一切正常很好)。
    猜你喜欢
    • 2013-06-15
    • 1970-01-01
    • 2016-02-22
    • 1970-01-01
    • 2018-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多