2012-08-17 55 views
2

我有一個測試引擎,我想在該引擎中定義一個自定義記錄器,該自定義記錄器寫入主應用「logs」目錄中的test.log文件。定義自定義記錄器的Rails 3引擎

我試圖在引擎類中定義它,但它不工作:

module Test 

    class Engine < ::Rails::Engine 
     isolate_namespace Test 
     tracking_logger = Logger.new(Rails.root.join('log', "tracking.log"), 10, 30*1024*1024) 

當我嘗試啓動它提高了服務器: <class:Engine>: undefined method join for nil:NilClass (NoMethodError)

這意味着我無法看到主引擎本身的應用程序根路徑。你會如何建議我解決它?

回答

0

您需要獲取您的app實例。在initializer方法中執行。例如,跟蹤區域設置:

module Test 
    class Engine < ::Rails::Engine 

    initializer("your_engine.set_locale") do |app| 
     tracking_logger = Logger.new(app.root.join('log', "tracking.log"), 10, 30*1024*1024) 
     config.I18n.default_locale = :en 
     tracking_logger.debug("My_Engine just set its custom locale to :en\n\n") 
    end 

但不幸的是,我不知道如何將這種tracking_logger實例傳遞給其他initilizers或方法。在我需要記錄的東西的每種方法中,不好實例化一個新的tracking_logger。關於如何實例化一次,然後在兩種方法之間進行實例化的線索將受到高度讚賞。