在许多ruby类中共享记录器实例的最佳(正确)方法是什么?
现在我刚刚将logger创建为全局$ logger = Logger.new变量,但我觉得有一种更好的方法可以在不使用全局变量的情况下执行此操作。
如果我有以下内容:
module Foo
class A
class B
class C
...
class Z
end
在所有类中共享记录器实例的最佳方法是什么?我是否以某种方式在Foo模块中声明/创建记录器,或者只是使用全局$ logger?
答案 0 :(得分:10)
在模块中添加一个常量:
module Foo
Logger = Logger.new
class A
class B
class C
...
class Z
end
然后你可以在课堂上Logger.log('blah')
。由于我们使用Logger
隐藏全局常量Foo::Logger
,这意味着如果要引用Logger
模块中的Foo
类,则必须使用范围解析:::Logger
。
答案 1 :(得分:1)
您可以为您的应用创建单例记录器,因此每次引用都将是同一个对象。
require 'singleton'
class Logger
include Singleton
end
l = Logger.instance
k = Logger.instance
puts k.object_id == l.object_id #returns true