class MultipleDevicesLogger

Constants

SEVERITIES

Attributes

default_device[R]

Public Class Methods

new() click to toggle source
Calls superclass method
# File lib/multiple_devices_logger.rb, line 18
def initialize
  super(nil)
  clear_devices
end

Public Instance Methods

add(severity, message = nil, progname = nil) { || ... } click to toggle source
# File lib/multiple_devices_logger.rb, line 23
def add(severity, message = nil, progname = nil)
  severity ||= UNKNOWN
  return true if severity < level
  progname ||= self.progname
  if message.nil?
    if block_given?
      message = yield
    else
      message = progname
      progname = self.progname
    end
  end
  return false if exception_ignored?(message)
  devices_for(severity).each do |device|
    next if device.exception_ignored?(message)
    formatter = device.formatter || self.formatter || @default_formatter
    device.write(formatter.call(format_severity(severity), Time.now, progname, message))
  end
  true
end
Also aliased as: log
add_device(device, *severities) click to toggle source
# File lib/multiple_devices_logger.rb, line 45
def add_device(device, *severities)
  severities = [severities].flatten
  options = severities.last.is_a?(Hash) ? severities.pop : {}
  formatter = nil
  if options.key?(:formatter)
    formatter = options.delete(:formatter)
    raise ArgumentError.new("Formatter must respond to #call, #{formatter.inspect} given") unless formatter.respond_to?(:call)
  end
  ignored_exceptions = options.delete(:ignore_exceptions)
  device = LogDevice.new(device, **options) unless device.is_a?(Logger::LogDevice)
  device.formatter = formatter
  device.ignore_exceptions(ignored_exceptions) if ignored_exceptions.present?
  if severities.empty?
    keys = SEVERITIES.values
  else
    keys = severities.map { |severity| parse_severities_with_operator(severity) }.flatten.uniq
  end
  keys.each do |key|
    @devices[key] ||= []
    @devices[key] << device
  end
  self
end
clear_devices() click to toggle source
# File lib/multiple_devices_logger.rb, line 69
def clear_devices
  @devices = {}
end
default_device=(value) click to toggle source
# File lib/multiple_devices_logger.rb, line 73
def default_device=(value)
  @default_device = value.is_a?(LogDevice) ? value : LogDevice.new(value)
end
devices_for(severity) click to toggle source
# File lib/multiple_devices_logger.rb, line 77
def devices_for(severity)
  @devices[parse_severity(severity)] || [default_device].compact || []
end
level=(value) click to toggle source
Calls superclass method
# File lib/multiple_devices_logger.rb, line 81
def level=(value)
  super(parse_severity(value))
end
log(severity, message = nil, progname = nil)
Alias for: add
reopen(log = nil) click to toggle source
# File lib/multiple_devices_logger.rb, line 85
def reopen(log = nil)
  raise NotImplementedError.new("#{self.class}#reopen")
end

Private Instance Methods

format_message(severity, datetime, progname, msg) click to toggle source
# File lib/multiple_devices_logger.rb, line 91
def format_message(severity, datetime, progname, msg)
  raise NotImplementedError.new("#{self.class}#format_message")
end
parse_severities_with_operator(value) click to toggle source
# File lib/multiple_devices_logger.rb, line 102
def parse_severities_with_operator(value)
  if match = value.to_s.strip.match(/^([<>]=?)\s*(.+)$/)
    operator = match[1]
    severity = parse_severity(match[2])
    return SEVERITIES.values.select { |l| l.send(operator, severity) }
  end
  [parse_severity(value)]
end
parse_severity(value) click to toggle source
# File lib/multiple_devices_logger.rb, line 95
def parse_severity(value)
  int_value = value.is_a?(Integer) ? value : (Integer(value.to_s) rescue nil)
  return int_value if SEVERITIES.values.include?(int_value)
  severity = value.to_s
  SEVERITIES[value.to_s.strip.downcase] || raise(ArgumentError.new("Invalid log severity: #{value.inspect}"))
end