我有一个测试引擎,我想在该引擎中定义一个自定义记录器,该记录器写入主应用程序“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)
这意味着我无法从引擎本身看到主应用程序根路径。你怎么建议我搞定?
答案 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
并不好。一个如何实例化它然后在方法之间进行实例化的线索将受到高度赞赏。