在模块/类之间共享全局记录器

cpj*_*eur 5 ruby logging global-variables

在许多ruby类中共享记录器实例的最佳(正确)方法是什么?

现在我只是将记录器创建为全局$ logger = Logger.new变量,但我觉得有一种更好的方法可以在不使用全局变量的情况下执行此操作.

如果我有以下内容:

module Foo
  class A
  class B
  class C
  ...
  class Z
end
Run Code Online (Sandbox Code Playgroud)

在所有类中共享记录器实例的最佳方法是什么?我是否以某种方式在Foo模块中声明/创建记录器,或者只是使用全局$ logger?

Pes*_*sto 10

在模块中添加一个常量:

module Foo
  Logger = Logger.new
  class A
  class B
  class C
  ...
  class Z
end
Run Code Online (Sandbox Code Playgroud)

然后你可以Logger.log('blah')在你的课堂上做.由于我们的阴影,全球不断LoggerFoo::Logger,这意味着如果你想指的是Logger类内Foo模块,你必须使用范围解析:::Logger.