Sha256: 2b3fd2aaec1ee08683112086856cd01f23bb5c0cc6332ef5d724daea52667cac

Contents?: true

Size: 939 Bytes

Versions: 2

Compression:

Stored size: 939 Bytes

Contents

module Semlogr
  module Rack
    class RequestLogger
      def initialize(app, logger: nil, path_filters: [])
        @app = app
        @logger = logger
        @path_filters = path_filters
      end

      def call(env)
        path = env['REQUEST_PATH']
        return @app.call(env) if filtered?(path)

        start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
        status, headers, body = @app.call(env)
        finish = Process.clock_gettime(Process::CLOCK_MONOTONIC)

        logger.info(
          'HTTP {method} {path} - {status} ({duration}s)',
          method: env['REQUEST_METHOD'],
          path: path,
          status: status,
          duration: (finish - start).round(4)
        )

        [status, headers, body]
      end

      private

      def logger
        @logger || Semlogr.logger
      end

      def filtered?(path)
        @path_filters.any? { |filter| filter =~ path }
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
semlogr-rack-0.1.3 lib/semlogr/rack/request_logger.rb
semlogr-rack-0.1.2 lib/semlogr/rack/request_logger.rb