class LogStasher::RequestLogSubscriber
Public Instance Methods
process_action(event)
click to toggle source
# File lib/logstasher/log_subscriber.rb, line 6 def process_action(event) payload = event.payload data = extract_request(payload) data.merge! extract_status(payload) data.merge! runtimes(event) data.merge! location(event) data.merge! extract_exception(payload) data.merge! extract_custom_fields(payload) tags = ['request'] tags.push('exception') if payload[:exception] event = LogStash::Event.new(data.merge('source' => LogStasher.source, 'tags' => tags)) LogStasher.logger << event.to_json + "\n" end
redirect_to(event)
click to toggle source
# File lib/logstasher/log_subscriber.rb, line 22 def redirect_to(event) Thread.current[:logstasher_location] = event.payload[:location] end
Private Instance Methods
extract_custom_fields(payload)
click to toggle source
# File lib/logstasher/log_subscriber.rb, line 95 def extract_custom_fields(payload) custom_fields = (!LogStasher.custom_fields.empty? && payload.extract!(*LogStasher.custom_fields)) || {} LogStasher.custom_fields.clear custom_fields end
extract_exception(payload)
click to toggle source
Monkey patching to enable exception logging
# File lib/logstasher/log_subscriber.rb, line 79 def extract_exception(payload) if payload[:exception] exception, message = payload[:exception] status = ActionDispatch::ExceptionWrapper.status_code_for_exception(exception) if LogStasher.backtrace backtrace = $!.backtrace.join("\n") else backtrace = $!.backtrace.first end message = "#{exception}\n#{message}\n#{backtrace}" { :status => status, :error => message } else {} end end
extract_format(payload)
click to toggle source
# File lib/logstasher/log_subscriber.rb, line 42 def extract_format(payload) if ::ActionPack::VERSION::MAJOR == 3 && ::ActionPack::VERSION::MINOR == 0 payload[:formats].first else payload[:format] end end
extract_path(payload)
click to toggle source
# File lib/logstasher/log_subscriber.rb, line 38 def extract_path(payload) payload[:path].split("?").first end
extract_request(payload)
click to toggle source
# File lib/logstasher/log_subscriber.rb, line 28 def extract_request(payload) { :method => payload[:method], :path => extract_path(payload), :format => extract_format(payload), :controller => payload[:params]['controller'], :action => payload[:params]['action'] } end
extract_status(payload)
click to toggle source
# File lib/logstasher/log_subscriber.rb, line 50 def extract_status(payload) if payload[:status] { :status => payload[:status].to_i } else { :status => 0 } end end
location(event)
click to toggle source
# File lib/logstasher/log_subscriber.rb, line 69 def location(event) if location = Thread.current[:logstasher_location] Thread.current[:logstasher_location] = nil { :location => location } else {} end end
runtimes(event)
click to toggle source
# File lib/logstasher/log_subscriber.rb, line 58 def runtimes(event) { :duration => event.duration, :view => event.payload[:view_runtime], :db => event.payload[:db_runtime] }.inject({}) do |runtimes, (name, runtime)| runtimes[name] = runtime.to_f.round(2) if runtime runtimes end end