Pregunta

Me gustaría incluir el nombre de la clase que invoca el registrador en la salida del registro, como:

[MyClass] here is the message

He visto la opción de usar el Contextos Pero no quiero tener que hacer algo como esto a lo largo de mi aplicación cuando registro cosas (tenga en cuenta, quiero el nombre de la clase en cada mensaje de registro):

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

Me gustaría llamar:

logger.debug 'hello'

¿Alguna sugerencia?

¿Fue útil?

Solución

Es preferible usar los contextos, pero puede usar su propio formato (consulte 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

O, en realidad, porque quieres que haga referencia self.class Mi consejo en realidad sería crear un módulo de registro que funcione así:

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

Probablemente no sea exactamente así, pero tienes la idea.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top