Class: Logfoo::Context

Inherits:
Object
  • Object
show all
Defined in:
lib/logfoo/context.rb

Constant Summary collapse

THREAD_CONTEXT =
:"logfoo_context"

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(app, name, context = nil) ⇒ Context

Returns a new instance of Context.



7
8
9
10
11
12
13
# 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

Instance Attribute Details

#levelObject

Returns the value of attribute level.



3
4
5
# File 'lib/logfoo/context.rb', line 3

def level
  @level
end

#nameObject (readonly)

Returns the value of attribute name.



3
4
5
# File 'lib/logfoo/context.rb', line 3

def name
  @name
end

#thread_idObject (readonly)

Returns the value of attribute thread_id.



3
4
5
# File 'lib/logfoo/context.rb', line 3

def thread_id
  @thread_id
end

#timedObject (readonly)

Returns the value of attribute timed.



3
4
5
# File 'lib/logfoo/context.rb', line 3

def timed
  @timed
end

Instance Method Details

#[]=(k, v) ⇒ Object



19
20
21
22
23
24
25
# 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) ⇒ Object



77
78
79
80
81
82
83
84
85
86
# 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) ⇒ Object



51
52
53
54
55
56
# 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) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# 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