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

cod*_*aig 3 ruby log4r

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

[MyClass] here is the message
Run Code Online (Sandbox Code Playgroud)

我已经看到了使用上下文的选项,但是当我记录内容时,我不希望在我的应用程序中做这样的事情(请记住,我希望每条日志消息中都有类名):

NDC.push('class:' + self.class.name)
logger.debug 'hello'
Run Code Online (Sandbox Code Playgroud)

我想打个电话:

logger.debug 'hello'
Run Code Online (Sandbox Code Playgroud)

有什么建议?

fx_*_*fx_ 8

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

logger = Logger.new 'test'
outputter = Outputter.stdout
outputter.formatter = PatternFormatter.new(:pattern => "%l - kittens - %m")
logger.outputters = outputter
logger.info 'adorable' # => INFO - kittens - adorable
Run Code Online (Sandbox Code Playgroud)

或者,实际上,因为您希望它引用self.class我的建议实际上是创建一个如此工作的Logging模块:

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
Run Code Online (Sandbox Code Playgroud)

可能不完全是这样,但你明白了.