2

我有一个测试引擎,我想在该引擎中定义一个自定义记录器,该记录器写入主应用程序“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)

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

4

1 回答 1

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在我需要记录某些东西的每种方法中实例化一个新的东西并不好。非常感谢如何实例化它一次然后在方法之间使用它的线索。

于 2013-06-14T07:50:21.287 回答