Добавить пользовательскую строгость внутри форматора Ruby logger [duplicate]

Если вы получаете это сообщение во время сохранения или компиляции сборки, просто закройте все файлы, а затем откройте любой файл для компиляции и сохранения.

Для меня причина в том, что я переименовал файл, и старый файл все еще был открыт.

11
задан FrustratedWithFormsDesigner 17 February 2010 в 15:41
поделиться

6 ответов

Это старый вопрос, но поскольку он так высоко поднялся на 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.

-1
ответ дан Colby M. White 1 September 2018 в 05:16
поделиться
  • 1
    Но как использовать встроенный регистратор? использует другую зависимость? – Mark Harviston 10 August 2018 в 20:23

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

2
ответ дан corprew 1 September 2018 в 05:16
поделиться

Ваш собственный регистратор просто должен перезаписать метод 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
4
ответ дан Lucas 1 September 2018 в 05:16
поделиться
  • 1
    IMO, это лучший ответ, поскольку он позволяет избежать перехвата обезьян ядра Ruby. + – sethvargo 22 August 2014 в 18:55

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

-1
ответ дан marcgg 1 September 2018 в 05:16
поделиться
  • 1
    Нелегко ли написать много кода? – turri 17 February 2010 в 15:56
  • 2
    @ Turri не то, что я знаю. Похоже, что уровни в значительной степени закодированы (Logger :: INFO и т. Д.). Может быть, есть другой способ, но я не могу думать об этом прямо сейчас – marcgg 17 February 2010 в 16:18

Уровни журнала - это не что иное, как целочисленные константы, определенные в 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
3
ответ дан Mladen Jablanović 1 September 2018 в 05:16
поделиться

Вы можете просто добавить к классу 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.')
5
ответ дан six364 1 September 2018 в 05:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: