2011-05-27 14 views
11

निष्पादित किसी भी कार्य को लॉगिंग करना मैं कार्यों के स्रोत को बदले बिना प्रत्येक रेक कार्य के लिए डेटाबेस लॉगिंग कैसे बना सकता हूं? मुझे डेटाटाइम, कार्य का नाम, पैरामीटर स्टोर करने की आवश्यकता है। क्या कोई प्रकार का पर्यवेक्षक इत्यादि है?रेक:

उत्तर

18

आप ओवरराइड कर सकते हैं Rake::Task#invokeapplication.rb में विधि:

#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 -- [] 
+0

इस टिप – Fivell

+1

के लिए 10x कृपया ध्यान दें कि '' * origin_invoke' args' के बजाय साथ खिलाया जाना चाहिए 'args', अन्यथा सभी तर्क एक सरणी में लपेटा जाएगा और पहले कार्य पैरामीटर के रूप में पारित किया जाएगा (पैरामीटर के बिना कार्यों के लिए - सबकुछ ठीक काम करता है)। – ljank

संबंधित मुद्दे