Rails 3引擎定义了一个自定义记录器

时间:2012-08-17 15:55:53

标签: ruby-on-rails ruby-on-rails-3

我有一个测试引擎,我想在该引擎中定义一个自定义记录器,该记录器写入主应用程序“logs”目录中的test.log文件。

我尝试在引擎类中定义它,但它不起作用:

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)

这意味着我无法从引擎本身看到主应用程序根路径。你怎么建议我搞定?

1 个答案:

答案 0 :(得分: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实例传递给其他启动器或方法。在我需要记录某些东西的每种方法中实例化一个新的tracking_logger并不好。一个如何实例化它然后在方法之间进行实例化的线索将受到高度赞赏。