-
-
Notifications
You must be signed in to change notification settings - Fork 297
/
log_subscriber.rb
41 lines (35 loc) · 1.12 KB
/
log_subscriber.rb
1
2
3
4
5
6
7
8
9
10
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
38
39
40
41
require 'active_support/core_ext/class/attribute'
require 'active_support/log_subscriber'
module Lograge
class LogSubscriber < ActiveSupport::LogSubscriber
class_attribute :logger
def initialize
self.logger ||= ActionController::Base.logger
end
def process_action(event)
payload = event.payload
message = "#{payload[:method]} #{payload[:path]} format=#{payload[:format]} action=#{payload[:params]['controller']}##{payload[:params]['action']}"
message << extract_status(payload)
message << runtimes(event)
logger.info(message)
end
private
def extract_status(payload)
if payload[:status]
" status=#{payload[:status]}"
elsif payload[:exception]
exception, message = payload[:exception]
" status=500 error='#{exception}:#{message}'"
end
end
def runtimes(event)
message = ""
{:duration => event.duration,
:view => event.payload[:view_runtime],
:db => event.payload[:db_runtime]}.each do |name, runtime|
message << " #{name}=%.2f" % runtime if runtime
end
message
end
end
end