pass logger as option to middleware so it's easily usable when grape is mounted inside rails

This commit is contained in:
aserafin 2015-04-16 12:48:21 +02:00
parent b908496d42
commit 4b662e5c23

View file

@ -4,24 +4,25 @@ module GrapeLogging
module Middleware
class RequestLogger < Grape::Middleware::Base
def before
@env[:db_duration] = 0
env[:db_duration] = 0
ActiveSupport::Notifications.subscribe('sql.active_record') do |*args|
event = ActiveSupport::Notifications::Event.new(*args)
@env[:db_duration] += event.duration
env[:db_duration] += event.duration
end if defined?(ActiveRecord)
end
def call!(env)
original_response = nil
duration = Benchmark.realtime { original_response = super(env) }
@app.logger.info parameters(::Rack::Request.new(env), original_response, duration)
duration = Benchmark.realtime { original_response = super(env) }
logger.info parameters(original_response, duration)
original_response
end
protected
def parameters(request, response, duration)
def parameters(response, duration)
{
path: request.path,
params: request.params,
@ -31,6 +32,15 @@ module GrapeLogging
status: response.first
}
end
private
def logger
@logger ||= @options[:logger] || Logger.new(STDOUT)
end
def request
@request ||= ::Rack::Request.new(env)
end
end
end
end