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好的,不是现成的。如果您想获得所描述的自由度,有几种方法/库。我建议调查一下这个问题的答案