class SmartLoggerWrapper
Constants
- BASE_OFFSET
- DELEGETING_METHODS
- NESTED_WRAPPER_OFFSET
- SEVERITY_MAPPING
- VERSION
Attributes
base_offset[R]
loggers[R]
options[R]
parent[R]
Public Class Methods
new(logger = Logger.new(STDOUT), *loggers, base_offset: nil, parent: nil, **options)
click to toggle source
# File lib/smart_logger_wrapper.rb, line 23 def initialize(logger = Logger.new(STDOUT), *loggers, base_offset: nil, parent: nil, **options) @base_offset = base_offset || BASE_OFFSET @parent = parent @loggers = be_parent_of!(logger, *loggers).freeze @options = options.freeze @_loggers_cache = {} end
Public Instance Methods
depth()
click to toggle source
# File lib/smart_logger_wrapper.rb, line 57 def depth return 0 if root? parent.depth + 1 end
format_message(severity, datetime, progname, msg)
click to toggle source
# File lib/smart_logger_wrapper.rb, line 66 def format_message(severity, datetime, progname, msg) loggers.first.send(:format_message, severity, datetime, progname, msg) end
format_severity(severity)
click to toggle source
# File lib/smart_logger_wrapper.rb, line 62 def format_severity(severity) loggers.first.send(:format_severity, severity) end
offset()
click to toggle source
# File lib/smart_logger_wrapper.rb, line 53 def offset @base_offset + depth * NESTED_WRAPPER_OFFSET end
with_option(option_name, *args)
click to toggle source
# File lib/smart_logger_wrapper.rb, line 70 def with_option(option_name, *args) new_options = options.merge(option_name => args) self.class.new(*loggers, base_offset: base_offset, parent: parent, **new_options) end
Private Instance Methods
be_parent_of!(*loggers)
click to toggle source
# File lib/smart_logger_wrapper.rb, line 111 def be_parent_of!(*loggers) loggers.each do |logger| # XXX: Calling a private method because it is an internal procedure logger.is_a?(SmartLoggerWrapper) ? logger.send(:set_parent!, self) : logger end end
build_messages(severity, *args, &block)
click to toggle source
# File lib/smart_logger_wrapper.rb, line 77 def build_messages(severity, *args, &block) messages = args.map { |arg| to_message(arg) } messages << to_message(block.call) if block_given? begin Options.apply_all!(messages, severity, self) rescue Options::ApplicationError => e loggers.each do |logger| logger.error(<<~EOM) Failed to apply options: #{e.inspect} #{e.backtrace.join("\n")} EOM end end messages end
method_missing(method_name, *args, &block)
click to toggle source
Calls superclass method
# File lib/smart_logger_wrapper.rb, line 122 def method_missing(method_name, *args, &block) if root? && Options.defined_option?(method_name) # When a root wrapper receives an defined option with the same name as the method name, # return a new logger wrapper with the option. @_loggers_cache[method_name] = {} unless @_loggers_cache.include?(method_name) logger_with_option = @_loggers_cache[method_name][args] ||= with_option(method_name, *args) return block.(logger_with_option) if block_given? logger_with_option else super end end
respond_to_missing?(method_name, includes_private)
click to toggle source
Calls superclass method
# File lib/smart_logger_wrapper.rb, line 135 def respond_to_missing?(method_name, includes_private) root? && Options.defined_option?(method_name) || super end
root?()
click to toggle source
# File lib/smart_logger_wrapper.rb, line 118 def root? parent == nil end
set_parent!(new_parent)
click to toggle source
# File lib/smart_logger_wrapper.rb, line 106 def set_parent!(new_parent) @_loggers_cache.clear if new_parent != nil @parent = new_parent == self ? nil : new_parent # to avoid stack overflow at #depth end
to_message(object)
click to toggle source
# File lib/smart_logger_wrapper.rb, line 93 def to_message(object) case object when String object when Exception backtrace = object.backtrace ? Utils::Backtrace.clean_backtrace(object.backtrace) : [] info = [object.inspect] (info + backtrace).join("\n") else object.inspect end end