class LogSanity::RequestLogger

Public Class Methods

new(app) click to toggle source
# File lib/log_sanity/middleware/request_logger.rb, line 4
def initialize(app)
  @app = app
end

Public Instance Methods

call(env) click to toggle source
# File lib/log_sanity/middleware/request_logger.rb, line 8
def call(env)
  request = ActionDispatch::Request.new(env)

  conditionally_silence(request) do |silence|
    begin
      start(request: request)
      resp = @app.call(env)
      resp[2] = Rack::BodyProxy.new(resp[2]) do
        finish(env: env, request: request, response: resp, silence: silence)
      end
      resp
    rescue Exception => e
      finish(env: env, request: request, exception: e, silence: silence)
      raise e
    end
  end
ensure
  ActiveSupport::LogSubscriber.flush_all!
end
conditionally_silence(request) { |silence| ... } click to toggle source
# File lib/log_sanity/middleware/request_logger.rb, line 28
def conditionally_silence(request)
  if silence = silence_path?(request)
    logger.silence do
      yield silence
    end
  else
    yield silence
  end
end

Private Instance Methods

finish(params) click to toggle source
# File lib/log_sanity/middleware/request_logger.rb, line 48
def finish(params)
  instrumenter = ActiveSupport::Notifications.instrumenter
  instrumenter.finish 'request.action_dispatch', params
end
logger() click to toggle source
# File lib/log_sanity/middleware/request_logger.rb, line 64
def logger
  Rails.logger
end
silence_path?(request) click to toggle source
# File lib/log_sanity/middleware/request_logger.rb, line 53
def silence_path?(request)
  Rails.application.config.logsanity.silence_paths.any? do |s|
    case s
    when Regexp
      s =~ request.path
    when String
      s == request.path
    end
  end
end
start(params) click to toggle source
# File lib/log_sanity/middleware/request_logger.rb, line 42
def start(params)
  LogSanity.reset_fields
  instrumenter = ActiveSupport::Notifications.instrumenter
  instrumenter.start 'request.action_dispatch', params
end