Как добавить пользовательский уровень журнала в logger в ruby? - PullRequest
11 голосов
/ 17 февраля 2010

Мне нужно добавить пользовательский уровень журнала, такой как «подробный» или «трафик», в ruby ​​logger, как это сделать?

Ответы [ 6 ]

5 голосов
/ 19 февраля 2010

Вы можете просто добавить в класс Logger:

require 'logger'

class Logger
  def self.custom_level(tag)
    SEV_LABEL << tag 
    idx = SEV_LABEL.size - 1 

    define_method(tag.downcase.gsub(/\W+/, '_').to_sym) do |progname, &block|
      add(idx, nil, progname, &block)
    end 
  end 

  # now add levels like this:

  custom_level 'TRAFFIC'
  custom_level 'ANOTHER-TAG'
end


# using it:

log = Logger.new($stdout)
log.traffic('testing')
log.another_tag('another message here.')
4 голосов
/ 17 февраля 2010

Ваш собственный регистратор просто должен переписать метод Logger#format_severity, что-то вроде этого:

class MyLogger < Logger

  SEVS = %w(DEBUG INFO WARN ERROR FATAL VERBOSE TRAFFIC)
  def format_severity(severity)
    SEVS[severity] || 'ANY'
  end

  def verbose(progname = nil, &block)
    add(5, nil, progname, &block)
  end
end
3 голосов
/ 17 февраля 2010

Уровни журнала - это не что иное, как целочисленные константы, определенные в logger.rb:

# Logging severity.
module Severity
  DEBUG = 0
  INFO = 1
  WARN = 2
  ERROR = 3
  FATAL = 4
  UNKNOWN = 5
end

Вы можете регистрировать сообщения на любом понравившемся вам уровне, используя Logger#add метод:

l.add 6, 'asd'
#=> A, [2010-02-17T16:25:47.763708 #14962]   ANY -- : asd
2 голосов
/ 21 марта 2010

Если вы начинаете нуждаться в куче нестандартных вещей, возможно, стоит попробовать log4r , гибкую библиотеку журналов, которая позволяет легко делать кучу интересных / полезных вещей.

0 голосов
/ 11 июля 2015

Это старый вопрос, но, поскольку он так высоко ценится в Google, я подумал, что было бы полезно найти правильный ответ. Вы действительно можете использовать метод Logging.init. Вот как бы вы добавили trace уровень журнала

require 'logging'
Logging.init %w(trace debug info warn error fatal)
Logging.logger.root.level = :trace
Logging.logger.root.add_appenders Logging.appenders.stdout
Logging.logger['hello'].trace 'TEST'

Используется 2.0.0 драгоценного камня logging.

0 голосов
/ 17 февраля 2010

Вы можете создать свой собственный регистратор, перегрузив Класс регистратора

...