Sha256: 0ea295761c733cb8afc53064b6d55f0c624042b3b5c3c230f9533e51859c65c4
Contents?: true
Size: 1.58 KB
Versions: 1
Compression:
Stored size: 1.58 KB
Contents
require 'rack/access_log/version' require 'rack' require 'benchmark' module Rack class AccessLog def initialize(app, logger, config = {}) @app = app @logger = logger configure!(config) end def call(env) status, header, body_lines, realtime = next_middleware_call_with_benchmarking(env) @logger.info(create_log_message(env, status, realtime)) if tracked?(env) [status, header, body_lines] end private def tracked?(env) !@exclude_paths.include?(env[Rack::PATH_INFO]) end def create_log_message(env, status, realtime) { execution_time_sec: realtime, remote_ip: remote_ip_by(env), request_method: env[Rack::REQUEST_METHOD], request_path: env[Rack::PATH_INFO], query_string: env[Rack::QUERY_STRING], response_status_code: status.to_i } end def remote_ip_by(env) env['HTTP_X_FORWARDED_FOR'] || env['REMOTE_ADDR'] || '-' end def next_middleware_call_with_benchmarking(env) status = nil header = nil body_lines = nil realtime = Benchmark.realtime do status, header, body_lines = @app.call(env) end [status, header, body_lines, realtime] end def configure!(config) @exclude_paths = [config.delete(:exclude_path)].flatten.compact.freeze check_for_unrequired_options(config) end def check_for_unrequired_options(config) invalid_config_options = config.keys raise("invalid config: #{invalid_config_options.join(', ')}") unless invalid_config_options.empty? end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
rack-access_log-0.1.0 | lib/rack/access_log.rb |