class GrapeLogging::Middleware::RequestLogger
Attributes
Persist response status & response (body) to use int in parameters
Persist response status & response (body) to use int in parameters
Public Class Methods
Source
# 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
Calls superclass method
Public Instance Methods
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 reporters @reporter.perform(collect_parameters) # Invoke loggers invoke_included_loggers(:after) nil end
Source
# File lib/grape_logging/middleware/request_logger.rb, line 27 def before reset_db_runtime start_time invoke_included_loggers(:before) end
Source
# File lib/grape_logging/middleware/request_logger.rb, line 51 def call!(env) @env = env # Before hook before # Catch error error = catch(:error) do @app_response = @app.call(@env) nil rescue StandardError => e # Log as 500 + message after(e.respond_to?(:status) ? e.status : 500, e.message) # Re-raise exception raise e end # Get status & response from app_response # when no error occurs. 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
Call stack and parse responses & status.
@note Exceptions are logged as 500 status & re-raised.
Protected Instance Methods
Source
# File lib/grape_logging/middleware/request_logger.rb, line 90 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, request_id: env['action_dispatch.request_id'], } end
Private Instance Methods
Source
# File lib/grape_logging/middleware/request_logger.rb, line 136 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
Source
# File lib/grape_logging/middleware/request_logger.rb, line 120 def db_runtime GrapeLogging::Timings.db_runtime.round(2) end
Source
# File lib/grape_logging/middleware/request_logger.rb, line 146 def invoke_included_loggers(method_name) @included_loggers.each do |logger| logger.send(method_name) if logger.respond_to?(method_name) end end
Source
# File lib/grape_logging/middleware/request_logger.rb, line 108 def request @request ||= ::Rack::Request.new(@env) end
Source
# File lib/grape_logging/middleware/request_logger.rb, line 124 def reset_db_runtime GrapeLogging::Timings.reset_db_runtime end
Source
# File lib/grape_logging/middleware/request_logger.rb, line 128 def start_time @start_time ||= Time.now end
Source
# File lib/grape_logging/middleware/request_logger.rb, line 132 def stop_time @stop_time ||= Time.now end
Source
# File lib/grape_logging/middleware/request_logger.rb, line 112 def total_runtime ((stop_time - start_time) * 1000).round(2) end
Source
# File lib/grape_logging/middleware/request_logger.rb, line 116 def view_runtime (total_runtime - db_runtime).round(2) end