class MultiLogger

The MultiLogger allows to log messages not only to a file OR the stdout, but to both or even more loggers at the same time. The severity defaults to WARN but can be specified when instantiating the MultiLogger.

log_1 = Logger.new(STDOUT)
log_2 = Logger.new(File.open('/tmp/foo'))
multi_logger = MultiLogger.new(:level => Logger::WARN, :loggers => log_1)
multi_logger.add_logger(log_2)
multi_logger.warn('Something interesting happened.')

By Chris Lowder, see gist.github.com/clowder/3639600

Attributes

level[R]

Public Class Methods

new(args = {}) click to toggle source

Initialize the MultiLogger, specify the severity level for all loggers and add one or more loggers.

@param [Hash] args the options to create a message with. @option args [Integer] :level (2) The severity level @option args [Array<Logger>] :loggers ([]) The loggers that are initially to be added @return the object

# File lib/nucleus/core/common/logging/multi_logger.rb, line 22
def initialize(args = {})
  @level = args[:level] || Logger::Severity::WARN
  @loggers = []

  Array(args[:loggers]).each { |logger| add_logger(logger) }
end

Public Instance Methods

add_logger(logger) click to toggle source

Add a logger to the MultiLogger and adjust its level to the MultiLogger’s current level.

@param [Logger] logger the logger to add to the MultiLogger instance

# File lib/nucleus/core/common/logging/multi_logger.rb, line 32
def add_logger(logger)
  logger.level = level
  @loggers << logger
end
close() click to toggle source

Close each Logger of the MultiLogger instance

# File lib/nucleus/core/common/logging/multi_logger.rb, line 46
def close
  @loggers.map(&:close)
end
level=(level) click to toggle source

Adjust the MultiLogger’s current level.

@param [Integer] level the severity level to apply to the MultiLogger instance

# File lib/nucleus/core/common/logging/multi_logger.rb, line 40
def level=(level)
  @level = level
  @loggers.each { |logger| logger.level = level }
end