Class: Yarder::Rack::Logger

Inherits:
Object show all
Defined in:
lib/yarder/rack/logger.rb

Instance Method Summary collapse

Constructor Details

#initialize(app, tags = nil) ⇒ Logger

Returns a new instance of Logger.



7
8
9
# File 'lib/yarder/rack/logger.rb', line 7

def initialize(app, tags = nil)
  @app, @tags = app, tags.presence
end

Instance Method Details

#call(env) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/yarder/rack/logger.rb', line 11

def call(env)

  t1 = Time.now
  request = ActionDispatch::Request.new(env)

  event = Yarder::Event.create Rails.logger, tags(request), true
  event['message'] = "#{request.request_method} #{request.filtered_path} for #{request.ip}"

  entry = (event.fields['rack'] ||= {})
  entry['client_ip'] = request.ip
  entry['method'] = request.request_method
  entry['path'] = request.filtered_path
  entry['url'] = request.url

  Yarder.log_entries[Thread.current] = event

  status, headers, response = @app.call(env)
  [status, headers, response]
ensure
  if event
    entry['status'] = status
    event.fields['duration']['total'] = (Time.now - t1)*1000
    event.write(true)
  end

  Yarder.log_entries[Thread.current] = nil
end

#tags(request) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/yarder/rack/logger.rb', line 39

def tags(request)
  return unless @tags
  @tags.reduce([]) do |arr, tag|
    case tag
    when Symbol
      arr << {tag.to_s => request.send(tag) }
    when Proc
      arr << tag.call(request)
    else
      arr << tag
    end
  end
end