class MrLogaLoga::Context
Description¶ ↑
This class provides a fluent interface to attach contextual information to log messages.
Public Class Methods
new(logger, context = {})
click to toggle source
# File lib/mr_loga_loga/context.rb, line 10 def initialize(logger, context = {}) @logger = logger @context = context end
Public Instance Methods
add(severity, message = nil, **context, &block)
click to toggle source
Log a message with the current context
@param context [Hash] the new context @yield the new context @return [Context] a new context object
# File lib/mr_loga_loga/context.rb, line 31 def add(severity, message = nil, **context, &block) severity ||= UNKNOWN return true unless @logger.log?(severity) context = merge_context(@context, context) context = context.call if context.is_a?(Proc) @logger.add(severity, message, **context, &block) end
Also aliased as: log
context(context = {}, &block)
click to toggle source
Add a new context to the log message
@param context [Hash] the new context @yield the new context @return [Context] a new context object
# File lib/mr_loga_loga/context.rb, line 20 def context(context = {}, &block) @context = merge_context(@context, context) @context = merge_context(@context, block) self end
method_missing(symbol, *args, &block)
click to toggle source
# File lib/mr_loga_loga/context.rb, line 54 def method_missing(symbol, *args, &block) context = block ? -> { { symbol => block.call } } : { symbol => unwrap(args) } @context = merge_context(@context, context) self end
respond_to_missing?(name, include_private = false)
click to toggle source
Calls superclass method
# File lib/mr_loga_loga/context.rb, line 60 def respond_to_missing?(name, include_private = false) super(name, include_private) end
Private Instance Methods
merge_blocks(original, new)
click to toggle source
# File lib/mr_loga_loga/context.rb, line 82 def merge_blocks(original, new) return -> { original.merge(new.call) } if original.is_a?(Hash) && new.is_a?(Proc) return -> { original.call.merge(new) } if original.is_a?(Proc) && new.is_a?(Hash) -> { original.call.merge(new.call) } end
merge_context(original, new)
click to toggle source
# File lib/mr_loga_loga/context.rb, line 74 def merge_context(original, new) return original unless new return original.merge(new) if original.is_a?(Hash) && new.is_a?(Hash) merge_blocks(original, new) end
unwrap(args)
click to toggle source
# File lib/mr_loga_loga/context.rb, line 66 def unwrap(args) if args.size == 1 args[0] else args end end