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
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