class GrapeLogging::Middleware::RequestLogger
Attributes
response_body[RW]
Persist response status & response (body) to use int in parameters
response_status[RW]
Persist response status & response (body) to use int in parameters
Public Class Methods
new(app, options = {})
click to toggle source
Calls superclass method
# File lib/grape_logging/middleware/request_logger.rb, line 16 def initialize(app, options = {}) super @included_loggers = @options[:include] || [] @reporter = if options[:instrumentation_key] Reporters::ActiveSupportReporter.new(@options[:instrumentation_key]) else Reporters::LoggerReporter.new(@options[:logger], @options[:formatter], @options[:log_level]) end end
Public Instance Methods
after(status, response)
click to toggle source
# File lib/grape_logging/middleware/request_logger.rb, line 33 def after(status, response) stop_time # Response status @response_status = status @response_body = response # Perform repotters @reporter.perform(collect_parameters) # Invoke loggers invoke_included_loggers(:after) nil end
before()
click to toggle source
# File lib/grape_logging/middleware/request_logger.rb, line 27 def before reset_db_runtime start_time invoke_included_loggers(:before) end
call!(env)
click to toggle source
Call stack and parse responses & status.
@note Exceptions are logged as 500 status & re-raised.
# File lib/grape_logging/middleware/request_logger.rb, line 51 def call!(env) @env = env # Before hook before # Catch error error = catch(:error) do begin @app_response = @app.call(@env) rescue => e # Log as 500 + message after(e.respond_to?(:status) ? e.status : 500, e.message) # Re-raise exception raise e end nil end # Get status & response from app_response # when no error occures. if error # Call with error & response after(error[:status], error[:message]) # Throw again throw(:error, error) else status, _, resp = *@app_response # Call after hook properly after(status, resp) end # Otherwise return original response @app_response end
Protected Instance Methods
parameters()
click to toggle source
# File lib/grape_logging/middleware/request_logger.rb, line 92 def parameters { status: response_status, time: { total: total_runtime, db: db_runtime, view: view_runtime }, method: request.request_method, path: request.path, params: request.params, host: request.host } end
Private Instance Methods
collect_parameters()
click to toggle source
# File lib/grape_logging/middleware/request_logger.rb, line 137 def collect_parameters parameters.tap do |params| @included_loggers.each do |logger| params.merge! logger.parameters(request, response_body) do |_, oldval, newval| oldval.respond_to?(:merge) ? oldval.merge(newval) : newval end end end end
db_runtime()
click to toggle source
# File lib/grape_logging/middleware/request_logger.rb, line 121 def db_runtime GrapeLogging::Timings.db_runtime.round(2) end
invoke_included_loggers(method_name)
click to toggle source
# File lib/grape_logging/middleware/request_logger.rb, line 147 def invoke_included_loggers(method_name) @included_loggers.each do |logger| logger.send(method_name) if logger.respond_to?(method_name) end end
request()
click to toggle source
# File lib/grape_logging/middleware/request_logger.rb, line 109 def request @request ||= ::Rack::Request.new(@env) end
reset_db_runtime()
click to toggle source
# File lib/grape_logging/middleware/request_logger.rb, line 125 def reset_db_runtime GrapeLogging::Timings.reset_db_runtime end
start_time()
click to toggle source
# File lib/grape_logging/middleware/request_logger.rb, line 129 def start_time @start_time ||= Time.now end
stop_time()
click to toggle source
# File lib/grape_logging/middleware/request_logger.rb, line 133 def stop_time @stop_time ||= Time.now end
total_runtime()
click to toggle source
# File lib/grape_logging/middleware/request_logger.rb, line 113 def total_runtime ((stop_time - start_time) * 1000).round(2) end
view_runtime()
click to toggle source
# File lib/grape_logging/middleware/request_logger.rb, line 117 def view_runtime total_runtime - db_runtime end