class Logfoo::Context

Constants

THREAD_CONTEXT

Attributes

level[R]
name[R]
thread_id[R]
timed[R]

Public Class Methods

new(app, name, context = nil) click to toggle source
# File lib/logfoo/context.rb, line 7
def initialize(app, name, context = nil)
  @app     = app
  @name    = name
  @level   = Logfoo::DEBUG
  @context = context || {}
  @timed   = Timed.new(self)
end

Public Instance Methods

[]=(k,v) click to toggle source
# File lib/logfoo/context.rb, line 19
def []=(k,v)
  if v == nil
    @context.delete(k)
  else
    @context[k] = v
  end
end
_call_log_fn(fn, payload) click to toggle source
# File lib/logfoo/context.rb, line 77
def _call_log_fn(fn, payload)
  case fn.arity
  when 0
    fn.call
  when 1
    fn.call(payload)
  else
    raise RuntimeError, "invalid lambda arity, must be 0 or 1, was #{fn.arity}"
  end
end
add(level, message, progname, &block) click to toggle source
# File lib/logfoo/context.rb, line 51
def add(level, message, progname, &block)
  lv = Logfoo::LEVELS[level]
  if lv
    public_send(lv.downcase, message, &block)
  end
end
context(keys = nil) { || ... } click to toggle source
# File lib/logfoo/context.rb, line 27
def context(keys = nil)
  if block_given?
    keys ||= {}
    begin
      Thread.current[THREAD_CONTEXT] ||= []
      Thread.current[THREAD_CONTEXT].push(keys)
      yield
    ensure
      Thread.current[THREAD_CONTEXT].pop
      if Thread.current[THREAD_CONTEXT] == []
        Thread.current[THREAD_CONTEXT] = nil
      end
    end
  else
    keys = (Thread.current[THREAD_CONTEXT] || []).inject({}) do |memo, kvs|
      kvs.each do |(k,v)|
        memo.merge!(k => v)
      end
      memo
    end
    @context.merge(keys)
  end
end
level=(level) click to toggle source
# File lib/logfoo/context.rb, line 15
def level=(level)
  @level = level.to_i
end

Private Instance Methods

build_line(level_id, message, payload) click to toggle source
# File lib/logfoo/context.rb, line 90
def build_line(level_id, message, payload)
  if message.is_a?(Exception)
    ErrLine.build(
      logger_name: @name,
      exception:   message,
      payload:     payload,
      level:       level_id
    )
  else
    LogLine.build(
      logger_name: @name,
      message:     message,
      payload:     payload,
      level:       level_id
    )
  end
end