класс ActiveSupport::BroadcastLogger
Вещательный логгер Active Support Logger
Вещательный логгер используется для записи сообщений во множество IO. Он часто используется в разработке для отображения сообщений в стандартном выводе и записи их в файл (development.log). С помощью вещательного логгера вы можете транслировать свои логи в неограниченное количество стоков.
Вещательный логгер ведет себя как стандартный логгер, и доступны все привычные методы. Однако все методы этого логгера будут распространяться и делегироваться другим логгерам, которые являются частью вещания.
Вещание ваших логов.
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]
Атрибуты
Возвращает все логгеры, которые являются частью этого вещания.
Публичные методы класса
# File activesupport/lib/active_support/broadcast_logger.rb, line 82 def initialize(*loggers) @broadcasts = [] @progname = "Broadcast" broadcast_to(*loggers) end
Общедоступные методы экземпляра
# File activesupport/lib/active_support/broadcast_logger.rb, line 112
def <<(message)
dispatch { |logger| logger.<<(message) }
end # File activesupport/lib/active_support/broadcast_logger.rb, line 116
def add(*args, &block)
dispatch { |logger| logger.add(*args, &block) }
end # File activesupport/lib/active_support/broadcast_logger.rb, line 93 def broadcast_to(*loggers) @broadcasts.concat(loggers) end
Добавить логгеры в рассылку.
broadcast_logger = ActiveSupport::BroadcastLogger.new broadcast_logger.broadcast_to(Logger.new(STDOUT), Logger.new(STDERR))
# File activesupport/lib/active_support/broadcast_logger.rb, line 162
def close
dispatch { |logger| logger.close }
end # File activesupport/lib/active_support/broadcast_logger.rb, line 121
def debug(*args, &block)
dispatch { |logger| logger.debug(*args, &block) }
end # File activesupport/lib/active_support/broadcast_logger.rb, line 173
def debug!
dispatch { |logger| logger.debug! }
end Устанавливает уровень логирования Logger::DEBUG для всей рассылки.
# File activesupport/lib/active_support/broadcast_logger.rb, line 168
def debug?
@broadcasts.any? { |logger| logger.debug? }
end True если уровень логирования позволяет записывать сообщения с уровнем Logger::DEBUG хотя бы в одну рассылку. False в противном случае.
# File activesupport/lib/active_support/broadcast_logger.rb, line 133
def error(*args, &block)
dispatch { |logger| logger.error(*args, &block) }
end # File activesupport/lib/active_support/broadcast_logger.rb, line 206
def error!
dispatch { |logger| logger.error! }
end Устанавливает уровень логирования Logger::ERROR для всей рассылки.
# File activesupport/lib/active_support/broadcast_logger.rb, line 201
def error?
@broadcasts.any? { |logger| logger.error? }
end True если уровень логирования позволяет записывать сообщения с уровнем Logger::ERROR хотя бы в одну рассылку. False в противном случае.
# File activesupport/lib/active_support/broadcast_logger.rb, line 137
def fatal(*args, &block)
dispatch { |logger| logger.fatal(*args, &block) }
end # File activesupport/lib/active_support/broadcast_logger.rb, line 217
def fatal!
dispatch { |logger| logger.fatal! }
end Устанавливает уровень логирования Logger::FATAL для всей рассылки.
# File activesupport/lib/active_support/broadcast_logger.rb, line 212
def fatal?
@broadcasts.any? { |logger| logger.fatal? }
end True если уровень логирования позволяет записывать сообщения с уровнем Logger::FATAL хотя бы в одну рассылку. False в противном случае.
# File activesupport/lib/active_support/broadcast_logger.rb, line 145
def formatter=(formatter)
dispatch { |logger| logger.formatter = formatter }
@formatter = formatter
end # File activesupport/lib/active_support/broadcast_logger.rb, line 125
def info(*args, &block)
dispatch { |logger| logger.info(*args, &block) }
end # File activesupport/lib/active_support/broadcast_logger.rb, line 184
def info!
dispatch { |logger| logger.info! }
end Устанавливает уровень логирования Logger::INFO для всей рассылки.
# File activesupport/lib/active_support/broadcast_logger.rb, line 179
def info?
@broadcasts.any? { |logger| logger.info? }
end True если уровень логирования позволяет записывать сообщения с уровнем Logger::INFO хотя бы в одну рассылку. False в противном случае.
# File activesupport/lib/active_support/broadcast_logger.rb, line 221 def initialize_copy(other) @broadcasts = [] @progname = other.progname.dup @formatter = other.formatter.dup broadcast_to(*other.broadcasts.map(&:dup)) end
# File activesupport/lib/active_support/broadcast_logger.rb, line 108 def level @broadcasts.map(&:level).min end
# File activesupport/lib/active_support/broadcast_logger.rb, line 151
def level=(level)
dispatch { |logger| logger.level = level }
end # File activesupport/lib/active_support/broadcast_logger.rb, line 156
def local_level=(level)
dispatch do |logger|
logger.local_level = level if logger.respond_to?(:local_level=)
end
end # File activesupport/lib/active_support/broadcast_logger.rb, line 104 def stop_broadcasting_to(logger) @broadcasts.delete(logger) end
Удалить логгер из рассылки. При удалении логгера сообщения, отправленные в рассылку, больше не будут записываться в его приемник.
sink = Logger.new(STDOUT) broadcast_logger = ActiveSupport::BroadcastLogger.new broadcast_logger.stop_broadcasting_to(sink)
# File activesupport/lib/active_support/broadcast_logger.rb, line 141
def unknown(*args, &block)
dispatch { |logger| logger.unknown(*args, &block) }
end # File activesupport/lib/active_support/broadcast_logger.rb, line 129
def warn(*args, &block)
dispatch { |logger| logger.warn(*args, &block) }
end # File activesupport/lib/active_support/broadcast_logger.rb, line 195
def warn!
dispatch { |logger| logger.warn! }
end Устанавливает уровень логирования Logger::WARN для всей рассылки.
# File activesupport/lib/active_support/broadcast_logger.rb, line 190
def warn?
@broadcasts.any? { |logger| logger.warn? }
end True если уровень логирования допускает запись записей с уровнем серьезности Logger::WARN, по крайней мере, в одну трансляцию. False в противном случае.
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.