Ruby Log4r-在日志输出中包含类名

Ruby Log4r-在日志输出中包含类名,ruby,log4r,Ruby,Log4r,我希望在日志输出中包含调用记录器的类的名称,例如: [MyClass] here is the message 我已经看到了使用的选项,但我不想在我的应用程序中记录东西时执行类似的操作(请记住,我希望每个日志消息中都包含类名): 我只想打电话: logger.debug 'hello' 有什么建议吗?最好使用上下文,但您可以使用自己的格式化程序(请参阅) 或者,实际上,因为您希望它引用self.class,我的建议实际上是创建一个如下工作的日志模块: module Logging def

我希望在日志输出中包含调用记录器的类的名称,例如:

[MyClass] here is the message
我已经看到了使用的选项,但我不想在我的应用程序中记录东西时执行类似的操作(请记住,我希望每个日志消息中都包含类名):

我只想打电话:

logger.debug 'hello'

有什么建议吗?

最好使用上下文,但您可以使用自己的格式化程序(请参阅)

或者,实际上,因为您希望它引用
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',这就是精神所在。我想您应该在几个类中使用它,并使用同一个Logger实例,这不会更新您为Logger设置的名称。这将为包含它的每个类创建一个Logger,并且仅当您在该模块中使用模块和方法并将该模块包含在一个类中时才起作用。该方法将被“转移”到类中,当然,当调用它时,
self.class
返回该类的名称。一个人不应该使用这个解决方案(但不幸的是,我没有想出另一个)。
logger = Logger.new 'test'
outputter = Outputter.stdout
outputter.formatter = PatternFormatter.new(:pattern => "%l - kittens - %m")
logger.outputters = outputter
logger.info 'adorable' # => INFO - kittens - adorable
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