Module: Yarder::TaggedLogging::Formatter

Defined in:
lib/yarder/tagged_logging.rb

Overview

:nodoc:

Instance Method Summary collapse

Instance Method Details

#call(severity, timestamp, progname, msg) ⇒ Object

This method is invoked when a log event occurs.



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/yarder/tagged_logging.rb', line 21

def call(severity, timestamp, progname, msg)
  @entry = nil
  if msg.class == Yarder::Event
    @entry = msg
  else
    @entry = Yarder::Event.new(Rails.logger)
    @entry['message'] = msg
  end
  @entry['severity'] = severity

  process_tags(current_tags)
  process_tags(current_request_tags)
  #TODO Should we do anything with progname? What about source?
  super(severity, timestamp, progname, @entry.to_json)
end

#clear_tags!Object



70
71
72
73
# File 'lib/yarder/tagged_logging.rb', line 70

def clear_tags!
  current_request_tags.clear
  current_tags.clear
end

#current_request_tagsObject



79
80
81
# File 'lib/yarder/tagged_logging.rb', line 79

def current_request_tags
  Thread.current[:activesupport_tagged_logging_request_tags] ||= []
end

#current_tagsObject



75
76
77
# File 'lib/yarder/tagged_logging.rb', line 75

def current_tags
  Thread.current[:activesupport_tagged_logging_tags] ||= []
end

#pop_tags(size = 1) ⇒ Object



66
67
68
# File 'lib/yarder/tagged_logging.rb', line 66

def pop_tags(size = 1)
  current_tags.pop size
end

#process_tags(tags) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
# File 'lib/yarder/tagged_logging.rb', line 54

def process_tags(tags)
  tags.each do |tag|
    if tag.class == Hash
      tag.each_pair do |k,v|
        @entry.fields[k] = v
      end
    else
      @entry['tags'] << tag
    end
  end
end

#push_request_tags(tags) ⇒ Object



50
51
52
# File 'lib/yarder/tagged_logging.rb', line 50

def push_request_tags(tags)
  Thread.current[:activesupport_tagged_logging_request_tags] = tags
end

#push_tags(*tags) ⇒ Object



44
45
46
47
48
# File 'lib/yarder/tagged_logging.rb', line 44

def push_tags(*tags)
  tags.flatten.reject(&:blank?).tap do |new_tags|
    current_tags.concat new_tags
  end
end

#tagged(*tags) ⇒ Object



37
38
39
40
41
42
# File 'lib/yarder/tagged_logging.rb', line 37

def tagged(*tags)
  new_tags = push_tags(*tags)
  yield self
ensure
  pop_tags(new_tags.size)
end