Log4r - включить имя класса в вывод журнала - PullRequest
3 голосов
/ 17 марта 2011

Я хотел бы включить имя класса, который вызывает регистратор, в вывод журнала, например:

[MyClass] here is the message

Я видел вариант использования Contexts , но я не хочу делать что-то подобное во всем приложении, когда регистрирую материал (имейте в виду, я хочу, чтобы имя класса каждое сообщение в журнале):

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

Я бы хотел просто позвонить:

logger.debug 'hello'

Есть предложения?

1 Ответ

8 голосов
/ 17 марта 2011

Использование контекстов предпочтительнее, но вы можете использовать свой собственный форматер (см. Форматеры 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

Или, вообще-то, потому что вы хотите, чтобы он ссылался на 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

Возможно, не совсем так, но вы поняли.

...