使用环境是最好的,但你可以使用自己的格式(见Log4r formatters)
logger = Logger.new 'test'
outputter = Outputter.stdout
outputter.formatter = PatternFormatter.new(:pattern => "%l - kittens - %m")
logger.outputters = outputter
logger.info 'adorable' # => INFO - kittens - adorable
或者,实际上,因为你想让它引用self.class
我的建议实际上会创建一个日志模块的工作原理像这样:
module Logging
def logger
return @logger if @logger
@logger = Logger.new 'test'
outputter = Outputter.stdout
outputter.formatter = PatternFormatter.new(:pattern => "%l - #{self.class} - %m")
@logger.outputters = outputter
@logger
end
end
class HasLogging
include Logging
def test
logger.info 'adorable'
end
end
test = HasLogging.new
test.test # => INFO - HasLogging - adorable
可能不完全是这样,但你明白了。
这就是我在找的东西,虽然我稍微修改了它来设置记录器名称等于'self.class.name',然后在输出器格式中使用'%C'而不是'self.class.name' – codecraig 2011-03-17 12:02:17
就是那种精神。我想你会在几个类中使用它,并使用相同的Logger实例,它不会更新您为Logger设置的名称。 – 2011-03-17 12:44:00
这将为包含**的每个类创建一个记录器**,并且仅在您使用该模块中的模块和方法并将该模块包含在类中时才起作用。该方法将被“转移”到类中,当然,当它被称为“self.class”时,将返回该类的名称。一个人不应该使用这个解决方案(但是我不会不幸地想到另一个)。 – phikes 2014-03-03 16:36:24