Spec-Zone.ru › Ruby on Rails 8.1

класс ActiveSupport::BroadcastLogger

Родительский класс:
Object
Подключенные модули:
ActiveSupport::LoggerSilence

Широковещательный логгер Active Support Logger

Широковещательный логгер используется для записи сообщений в несколько IO. Обычно он применяется в режиме разработки, чтобы выводить сообщения в STDOUT и одновременно записывать их в файл (development.log). С помощью широковещательного логгера можно направлять журналы в неограниченное количество приемников.

BroadcastLogger работает как стандартный логгер и предоставляет все привычные вам методы. Однако все методы этого логгера распространяются на другие логгеры, участвующие в трансляции, и делегируются им.

Трансляция журналов.

stdout_logger = Logger.new(STDOUT)
file_logger   = Logger.new("development.log")
broadcast = BroadcastLogger.new(stdout_logger, file_logger)

broadcast.info("Hello world!") # Writes the log to STDOUT and the development.log file.

Добавление логгера в трансляцию.

stdout_logger = Logger.new(STDOUT)
broadcast = BroadcastLogger.new(stdout_logger)
file_logger   = Logger.new("development.log")
broadcast.broadcast_to(file_logger)

broadcast.info("Hello world!") # Writes the log to STDOUT and the development.log file.

Изменение уровня журналирования для всех логгеров, участвующих в трансляции.

stdout_logger = Logger.new(STDOUT)
file_logger   = Logger.new("development.log")
broadcast = BroadcastLogger.new(stdout_logger, file_logger)

broadcast.level = Logger::FATAL # Modify the log level for the whole broadcast.

Прекращение трансляции журналов в приемник.

stdout_logger = Logger.new(STDOUT)
file_logger   = Logger.new("development.log")
broadcast = BroadcastLogger.new(stdout_logger, file_logger)
broadcast.info("Hello world!") # Writes the log to STDOUT and the development.log file.

broadcast.stop_broadcasting_to(file_logger)
broadcast.info("Hello world!") # Writes the log *only* to STDOUT.

В трансляции должен участвовать хотя бы один приемник. Иначе ваши журналы не будут записаны нигде. Например:

broadcast = BroadcastLogger.new
broadcast.info("Hello world") # The log message will appear nowhere.

Если вы добавите в трансляцию пользовательский логгер с пользовательскими методами, `BroadcastLogger` будет проксировать их и возвращать исходное значение либо массив исходных значений — в зависимости от количества логгеров в трансляции, которые ответили на вызов метода:

class MyLogger < ::Logger
  def loggable?
    true
  end
end

logger = BroadcastLogger.new
logger.loggable? # => A NoMethodError exception is raised because no loggers in the broadcasts could respond.

logger.broadcast_to(MyLogger.new(STDOUT))
logger.loggable? # => true
logger.broadcast_to(MyLogger.new(STDOUT))
puts logger.broadcasts # => [MyLogger, MyLogger]
logger.loggable? # [true, true]

Атрибуты

broadcasts [R]

Возвращает все логгеры, участвующие в этой трансляции.

progname [RW]

Открытые методы класса

new (*loggers) Показать исходный код
# File activesupport/lib/active_support/broadcast_logger.rb, line 81
def initialize(*loggers)
  @broadcasts = []
  @progname = "Broadcast"

  broadcast_to(*loggers)
end

Открытые методы экземпляра

broadcast_to (*loggers) Показать исходный код
# File activesupport/lib/active_support/broadcast_logger.rb, line 92
def broadcast_to(*loggers)
  @broadcasts.concat(loggers)
end

Добавляет логгеры в трансляцию.

broadcast_logger = ActiveSupport::BroadcastLogger.new
broadcast_logger.broadcast_to(Logger.new(STDOUT), Logger.new(STDERR))
debug! () Показать исходный код
# File activesupport/lib/active_support/broadcast_logger.rb, line 146
def debug!
  dispatch(:debug!)
end

Устанавливает уровень журналирования Logger::DEBUG для всей трансляции.

debug? () Показать исходный код
# File activesupport/lib/active_support/broadcast_logger.rb, line 141
def debug?
  @broadcasts.any? { |logger| logger.debug? }
end

Возвращает true, если уровень журналирования позволяет записывать в хотя бы один логгер, участвующий в трансляции, записи с уровнем серьезности Logger::DEBUG. В противном случае возвращает false.

error! () Показать исходный код
# File activesupport/lib/active_support/broadcast_logger.rb, line 179
def error!
  dispatch(:error!)
end

Устанавливает уровень журналирования Logger::ERROR для всей трансляции.

error? () Показать исходный код
# File activesupport/lib/active_support/broadcast_logger.rb, line 174
def error?
  @broadcasts.any? { |logger| logger.error? }
end

Возвращает true, если уровень журналирования позволяет записывать в хотя бы один логгер, участвующий в трансляции, записи с уровнем серьезности Logger::ERROR. В противном случае возвращает false.

fatal! () Показать исходный код
# File activesupport/lib/active_support/broadcast_logger.rb, line 190
def fatal!
  dispatch(:fatal!)
end

Устанавливает уровень журналирования Logger::FATAL для всей трансляции.

fatal? () Показать исходный код
# File activesupport/lib/active_support/broadcast_logger.rb, line 185
def fatal?
  @broadcasts.any? { |logger| logger.fatal? }
end

Возвращает true, если уровень журналирования позволяет записывать в хотя бы один логгер, участвующий в трансляции, записи с уровнем серьезности Logger::FATAL. В противном случае возвращает false.

info! () Показать исходный код
# File activesupport/lib/active_support/broadcast_logger.rb, line 157
def info!
  dispatch(:info!)
end

Устанавливает уровень журналирования Logger::INFO для всей трансляции.

info? () Показать исходный код
# File activesupport/lib/active_support/broadcast_logger.rb, line 152
def info?
  @broadcasts.any? { |logger| logger.info? }
end

Возвращает true, если уровень журналирования позволяет записывать в хотя бы один логгер, участвующий в трансляции, записи с уровнем серьезности Logger::INFO. В противном случае возвращает false.

initialize_copy (other) Показать исходный код
# File activesupport/lib/active_support/broadcast_logger.rb, line 194
def initialize_copy(other)
  @broadcasts = []
  @progname = other.progname.dup

  broadcast_to(*other.broadcasts.map(&:dup))
end
level () Показать исходный код
# File activesupport/lib/active_support/broadcast_logger.rb, line 135
def level
  @broadcasts.map(&:level).min
end

Возвращает самый низкий уровень журналирования среди всех логгеров, участвующих в трансляции.

local_level () Показать исходный код
# File activesupport/lib/active_support/broadcast_logger.rb, line 113
def local_level
  loggers = @broadcasts.select { |logger| logger.respond_to?(:local_level) }

  loggers.map do |logger|
    logger.local_level
  end.first
end
local_level= (level) Показать исходный код
# File activesupport/lib/active_support/broadcast_logger.rb, line 107
def local_level=(level)
  @broadcasts.each do |logger|
    logger.local_level = level if logger.respond_to?(:local_level=)
  end
end
stop_broadcasting_to (logger) Показать исходный код
# File activesupport/lib/active_support/broadcast_logger.rb, line 103
def stop_broadcasting_to(logger)
  @broadcasts.delete(logger)
end

Удаляет логгер из трансляции. После удаления логгера сообщения, отправленные в трансляцию, больше не будут записываться в соответствующий приемник.

sink = Logger.new(STDOUT)
broadcast_logger = ActiveSupport::BroadcastLogger.new

broadcast_logger.stop_broadcasting_to(sink)
warn! () Показать исходный код
# File activesupport/lib/active_support/broadcast_logger.rb, line 168
def warn!
  dispatch(:warn!)
end

Устанавливает уровень журналирования Logger::WARN для всей трансляции.

warn? () Показать исходный код
# File activesupport/lib/active_support/broadcast_logger.rb, line 163
def warn?
  @broadcasts.any? { |logger| logger.warn? }
end

Возвращает true, если уровень журналирования позволяет записывать в хотя бы один логгер, участвующий в трансляции, записи с уровнем серьезности Logger::WARN. В противном случае возвращает false.

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

Spec-Zone.ru

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