Class: MultipleDevicesLogger

Inherits:
Logger
  • Object
show all
Includes:
IgnoreExceptions
Defined in:
lib/multiple_devices_logger.rb,
lib/multiple_devices_logger/ignore_exceptions.rb

Defined Under Namespace

Modules: IgnoreExceptions

Constant Summary collapse

SEVERITIES =
{
  'debug' => DEBUG,
  'info' => INFO,
  'warn' => WARN,
  'error' => ERROR,
  'fatal' => FATAL,
  'unknown' => UNKNOWN,
}.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from IgnoreExceptions

#exception_ignored?, #ignore_exceptions, #ignored_exception_classes, #ignored_exceptions_procs

Constructor Details

#initializeMultipleDevicesLogger

Returns a new instance of MultipleDevicesLogger.



19
20
21
22
# File 'lib/multiple_devices_logger.rb', line 19

def initialize
  super(nil)
  clear_devices
end

Instance Attribute Details

#default_deviceObject

Returns the value of attribute default_device.



17
18
19
# File 'lib/multiple_devices_logger.rb', line 17

def default_device
  @default_device
end

Instance Method Details

#add(severity, message = nil, progname = nil) ⇒ Object Also known as: log



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/multiple_devices_logger.rb', line 24

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

#add_device(device, *severities) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/multiple_devices_logger.rb', line 46

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_devicesObject



70
71
72
# File 'lib/multiple_devices_logger.rb', line 70

def clear_devices
  @devices = {}
end

#devices_for(severity) ⇒ Object



78
79
80
# File 'lib/multiple_devices_logger.rb', line 78

def devices_for(severity)
  @devices[parse_severity(severity)] || [default_device].compact || []
end

#level=(value) ⇒ Object



82
83
84
# File 'lib/multiple_devices_logger.rb', line 82

def level=(value)
  super(parse_severity(value))
end

#reopen(_ = nil) ⇒ Object

Raises:

  • (NotImplementedError)


86
87
88
# File 'lib/multiple_devices_logger.rb', line 86

def reopen(_ = nil)
  raise NotImplementedError.new("#{self.class}#reopen")
end