Spec-Zone.ru › Ruby on Rails 7.2

модуль ActiveSupport::TaggedLogging

Модуль Active Support Tagged Logging

Оборачивает любой стандартный объект Logger для предоставления возможностей маркировки.

Может вызываться с блоком:

logger = ActiveSupport::TaggedLogging.new(Logger.new(STDOUT))
logger.tagged('BCX') { logger.info 'Stuff' }                                  # Logs "[BCX] Stuff"
logger.tagged('BCX', "Jason") { |tagged_logger| tagged_logger.info 'Stuff' }  # Logs "[BCX] [Jason] Stuff"
logger.tagged('BCX') { logger.tagged('Jason') { logger.info 'Stuff' } }       # Logs "[BCX] [Jason] Stuff"

Если вызывается без блока, возвращается новый логгер с применёнными тегами:

logger = ActiveSupport::TaggedLogging.new(Logger.new(STDOUT))
logger.tagged("BCX").info "Stuff"                 # Logs "[BCX] Stuff"
logger.tagged("BCX", "Jason").info "Stuff"        # Logs "[BCX] [Jason] Stuff"
logger.tagged("BCX").tagged("Jason").info "Stuff" # Logs "[BCX] [Jason] Stuff"

Это используется в стандартном логгере Rails.logger, как настроено Railties, чтобы легко добавлять к строкам логов поддомены, идентификаторы запросов и всё остальное, что поможет в отладке многопользовательских приложений в производстве.

Публичные методы класса

new(logger) Показать исходный код
# File activesupport/lib/active_support/tagged_logging.rb, line 116
def self.new(logger)
  logger = logger.clone

  if logger.formatter
    logger.formatter = logger.formatter.clone

    # Workaround for https://bugs.ruby-lang.org/issues/20250
    # Can be removed when Ruby 3.4 is the least supported version.
    logger.formatter.object_id if logger.formatter.is_a?(Proc)
  else
    # Ensure we set a default formatter so we aren't extending nil!
    logger.formatter = ActiveSupport::Logger::SimpleFormatter.new
  end

  logger.formatter.extend Formatter
  logger.extend(self)
end

Публичные методы экземпляра

flush() Показать исходный код
# File activesupport/lib/active_support/tagged_logging.rb, line 147
def flush
  clear_tags!
  super if defined?(super)
end
Вызывается метод суперкласса
tagged(*tags) { |self| ... } Показать исходный код
# File activesupport/lib/active_support/tagged_logging.rb, line 136
def tagged(*tags)
  if block_given?
    formatter.tagged(*tags) { yield self }
  else
    logger = ActiveSupport::TaggedLogging.new(self)
    logger.formatter.extend LocalTagStorage
    logger.push_tags(*formatter.current_tags, *tags)
    logger
  end
end

© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API