ruby中单例记录器的使用

ruby中单例记录器的使用,ruby,logging,Ruby,Logging,我有如下代码: require 'logger' require 'singleton' class Logger include Singleton @@old_initialize = Logger.instance_method :initialize def initialize @@old_initialize.bind(self).call(STDERR) end end class MyClass def init

我有如下代码:

require 'logger'
require 'singleton'

class Logger
    include Singleton
    @@old_initialize = Logger.instance_method :initialize

    def initialize
        @@old_initialize.bind(self).call(STDERR)
    end  
end 

class MyClass
    def initialize
        @logger = Logger.new("output.log")
    end
end
我在运行MyClass时遇到以下错误

initialize]中:为Logger:Class调用私有方法
(命名者)

我使用的是Ruby版本:

ruby 1.8.6(2009-08-04 patchlevel 383)[x86_64-linux]


让我们看一下的文件。包含该模块可确保通过将
initialize
方法设置为私有,只能创建类的一个实例。因此,您将收到
NoMethodError-newisprivate
错误。它还说:

实例是在第一次调用
Klass.instance()
时创建的

因此,您可以调用
.instance

class MyClass
  def initialize
     @logger = Logger.instance()
  end
end

现在您可以调用
MyClass.new
,它将返回您的logger对象。但是,通过这种方式,您不能传递额外的参数。所以这里真正的问题是,为什么它首先需要是一个单体呢?

让我们看看的文档。包含该模块可确保通过将
initialize
方法设置为私有,只能创建类的一个实例。因此,您将收到
NoMethodError-newisprivate
错误。它还说:

实例是在第一次调用
Klass.instance()
时创建的

因此,您可以调用
.instance

class MyClass
  def initialize
     @logger = Logger.instance()
  end
end

现在您可以调用
MyClass.new
,它将返回您的logger对象。但是,通过这种方式,您不能传递额外的参数。所以这里真正的问题是,为什么一开始就需要单身?

你的问题是什么?(TM)问题是,“为什么我会收到Nomethoderor”?您能帮助解决吗?不要调用
new
?改为使用
:发送
,但要确保您确实想要这样做,并且这样做不会破坏其他一切?不要让它成为一个单例,调用
new
没有任何意义,因为只能有一个?你的问题是什么?(TM)问题是,“为什么我会收到Nomethoderor”?您能帮助解决吗?不要调用
new
?改为使用
:发送
,但要确保您确实想要这样做,并且这样做不会破坏其他一切?不要将其设置为单例,因为调用
new
没有任何意义,因为只能有一个?我只需要在我的代码库中创建/利用记录器功能。我们以前从未试过。我的整个应用程序在批处理模式下运行,并与10-15个类进行交互。我想使用logger,我在某个地方遇到了上面给出的代码,创建了singleton logger。我不确定我是否需要单身。我需要在我的应用程序的所有类中创建日志记录工具。任何一个好的例子都会对我的需求有帮助。注意:我还需要在日志记录期间记录类名、方法和行号。如何做到这一点?@user2562153然后只使用普通的记录器,不要修改它我看了记录器。我看起来很简单。但是,我需要使用自己的级别进行自定义日志记录,消息指示发生特定日志记录的模块::模块::类、方法和行号。我能用logger实现这一点吗?@user2562153好的,不是现成的。如果您想获得所描述的自由度,有几种方法/库。我建议研究一下这个问题的答案,我所需要的只是在我的代码库中创建/利用logger特性。我们以前从未试过。我的整个应用程序在批处理模式下运行,并与10-15个类进行交互。我想使用logger,我在某个地方遇到了上面给出的代码,创建了singleton logger。我不确定我是否需要单身。我需要在我的应用程序的所有类中创建日志记录工具。任何一个好的例子都会对我的需求有帮助。注意:我还需要在日志记录期间记录类名、方法和行号。如何做到这一点?@user2562153然后只使用普通的记录器,不要修改它我看了记录器。我看起来很简单。但是,我需要使用自己的级别进行自定义日志记录,消息指示发生特定日志记录的模块::模块::类、方法和行号。我能用logger实现这一点吗?@user2562153好的,不是现成的。如果您想获得所描述的自由度,有几种方法/库。我建议调查一下这个问题的答案