lib/rack/common_logger.rb in rack-2.2.10 vs lib/rack/common_logger.rb in rack-3.0.0.beta1
- old
+ new
@@ -1,7 +1,12 @@
# frozen_string_literal: true
+require_relative 'constants'
+require_relative 'utils'
+require_relative 'body_proxy'
+require_relative 'request'
+
module Rack
# Rack::CommonLogger forwards every request to the given +app+, and
# logs a line in the
# {Apache common log format}[http://httpd.apache.org/docs/1.3/logs.html#common]
# to the configured logger.
@@ -33,38 +38,38 @@
# the logging happens after the request body has been fully sent, any
# exceptions raised during the sending of the response body will
# cause the request not to be logged.
def call(env)
began_at = Utils.clock_time
- status, headers, body = @app.call(env)
- headers = Utils::HeaderHash[headers]
- body = BodyProxy.new(body) { log(env, status, headers, began_at) }
- [status, headers, body]
+ status, headers, body = response = @app.call(env)
+
+ response[2] = BodyProxy.new(body) { log(env, status, headers, began_at) }
+ response
end
private
# Log the request to the configured logger.
- def log(env, status, header, began_at)
- length = extract_content_length(header)
+ def log(env, status, response_headers, began_at)
+ request = Rack::Request.new(env)
+ length = extract_content_length(response_headers)
- msg = FORMAT % [
- env['HTTP_X_FORWARDED_FOR'] || env["REMOTE_ADDR"] || "-",
- env["REMOTE_USER"] || "-",
+ msg = sprintf(FORMAT,
+ request.ip || "-",
+ request.get_header("REMOTE_USER") || "-",
Time.now.strftime("%d/%b/%Y:%H:%M:%S %z"),
- env[REQUEST_METHOD],
- env[SCRIPT_NAME],
- env[PATH_INFO],
- env[QUERY_STRING].empty? ? "" : "?#{env[QUERY_STRING]}",
- env[SERVER_PROTOCOL],
+ request.request_method,
+ request.script_name,
+ request.path_info,
+ request.query_string.empty? ? "" : "?#{request.query_string}",
+ request.get_header(SERVER_PROTOCOL),
status.to_s[0..3],
length,
- Utils.clock_time - began_at ]
+ Utils.clock_time - began_at)
- msg.gsub!(/[^[:print:]\n]/) { |c| "\\x#{c.ord}" }
+ msg.gsub!(/[^[:print:]\n]/) { |c| sprintf("\\x%x", c.ord) }
- logger = @logger || env[RACK_ERRORS]
-
+ logger = @logger || request.get_header(RACK_ERRORS)
# Standard library logger doesn't support write but it supports << which actually
# calls to write on the log device without formatting
if logger.respond_to?(:write)
logger.write(msg)
else