Log4r - inclure le nom de classe en sortie du journal
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?
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.