semlogger/lib/semlogger/rack.rb

52 lines
1017 B
Ruby
Raw Normal View History

2012-05-14 12:02:50 +02:00
class Semlogger::Rack < Rails::Rack::Logger
2012-05-14 11:52:45 +02:00
def initialize app, tags = nil, data = nil
super app, tags
@data = data || {}
2012-05-14 11:52:45 +02:00
end
def call_app request, env
2012-05-14 11:52:45 +02:00
path = request.filtered_path
Rails.logger.custom( :connection, request.ip, Thread.current.object_id, request.request_method, path).info
2012-05-14 11:52:45 +02:00
@app.call env
ensure
ActiveSupport::LogSubscriber.flush_all!
end
def call env
request = ActionDispatch::Request.new env
compute_tagged_ request do
compute_data_ request do
call_app request, env
end
end
end
def compute_tagged_ request
if Rails.logger.respond_to? :tagged
Rails.logger.tagged( compute_tags( request)) { yield }
2012-05-14 11:52:45 +02:00
else
yield
2012-05-14 11:52:45 +02:00
end
end
def compute_data_ request
if Rails.logger.respond_to? :data
Rails.logger.data( compute_data( request)) { yield }
else
yield
end
end
2012-05-14 11:52:45 +02:00
def compute_data request
2012-05-14 11:52:45 +02:00
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