semlogger/lib/slogger/rack.rb

38 lines
731 B
Ruby

class Slogger::Rack < Rails::Rack::Logger
def initialize app, tags = nil, data = nil
super app, tags
@data = data
end
def call_app env
request = ActionDispatch::Request.new env
path = request.filtered_path
Rails.logger.info [:connection, request.ip, Thread.current.object_id, request.request_method, path]
@app.call env
ensure
ActiveSupport::LogSubscriber.flush_all!
end
def call env
if @data
Rails.logger.data( compute_data( env)) { super env }
else
super env
end
end
def compute_data env
request = ActionDispatch::Request.new env
data = @data.dup
data.each do |k, v|
case v
when Proc
data[k] = v.call request
when Symbol
data[k] = request.send v
end
end
end
end