module ActiveSupport::TaggedLogging
Журналирование с тегами в Active Support
Оборачивает любой стандартный объект 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, чтобы упростить добавление в строки журнала субдоменов, идентификаторов запросов и любых других данных, помогающих отлаживать рабочие приложения с несколькими пользователями.
Открытые методы класса
# File activesupport/lib/active_support/tagged_logging.rb, line 117 def self.logger(*args, **kwargs) new ActiveSupport::Logger.new(*args, **kwargs) end
Возвращает ‘ActiveSupport::Logger`, уже обёрнутый функциональностью журналирования с тегами.
# File activesupport/lib/active_support/tagged_logging.rb, line 121
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 Открытые методы экземпляра
# File activesupport/lib/active_support/tagged_logging.rb, line 152 def flush clear_tags! super if defined?(super) end
Вызывает метод суперкласса
# File activesupport/lib/active_support/tagged_logging.rb, line 141
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.