Question

Je voudrais inclure le nom de la classe qui appelle l'enregistreur dans la sortie du journal, tels que:

[MyClass] here is the message

Je l'ai vu la possibilité d'utiliser le Contextes, mais je ne veux pas devoir faire quelque chose comme ça tout au long de mon application lorsque je me connecte des choses (garder à l'esprit, je veux que le nom de classe dans chaque message de journal):

NDC.push('class:' + self.class.name)
logger.debug 'hello'

Je voudrais simplement appel:

logger.debug 'hello'

Toutes les suggestions?

Était-ce utile?

La solution

En utilisant les contextes est préférable, mais vous pouvez utiliser votre propre formatter (voir Log4r formatteurs )

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

Ou, en fait, parce que vous voulez qu'il référence self.class mon conseil serait en fait de créer un module d'enregistrement qui fonctionne comme ceci:

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

Probablement pas exactement comme ça, mais vous voyez l'idée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top