Sha256: 4fda7c75e3eccb5ac3138f36aff5d50a3a5a212d628ae1dad052c8ac08cc78b3

Contents?: true

Size: 1.48 KB

Versions: 3

Compression:

Stored size: 1.48 KB

Contents

module Inferno
  module Utils
    # @api private
    module Middleware
      class RequestLogger
        attr_reader :app

        def initialize(app)
          @app = app
        end

        def logger
          @logger ||= Application['logger']
        end

        def call(env)
          start = Time.now
          log_request(env)
          begin
            response = app.call(env)
            log_response(response, start, Time.now)
          rescue StandardError => e
            log_response([500, nil, nil], start, Time.now, e)
            raise e
          end

          response
        end

        def log_response(response, start_time, end_time, exception = nil)
          elapsed = end_time - start_time
          status, _response_headers, response_body = response if response
          status, = response if exception

          logger.info("#{status} in #{elapsed.in_milliseconds} ms")
          logger.info(response_body)
        end

        def log_request(env)
          method = env['REQUEST_METHOD']
          scheme = env['rack.url_scheme']
          host = env['HTTP_HOST']
          path = env['REQUEST_URI']
          query = env['rack.request.query_string']
          body = env['rack.input']
          body = body.instance_of?(Puma::NullIO) ? nil : body.string
          query_string = query.blank? ? '' : "?#{query}"

          logger.info("#{method} #{scheme}://#{host}#{path}#{query_string}")
          logger.info(body) if body.present?
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
inferno_core-0.0.3 lib/inferno/utils/middleware/request_logger.rb
inferno_core-0.0.2 lib/inferno/utils/middleware/request_logger.rb
inferno_core-0.0.1 lib/inferno/utils/middleware/request_logger.rb