Class: Rack::CommonLogger
- Defined in:
- vendor/bundler/ruby/3.4.0/bundler/gems/rack-40d68f842b5f/lib/rack/common_logger.rb
Overview
Rack::CommonLogger forwards every request to the given +app+, and logs a line in the common log format[http://httpd.apache.org/docs/1.3/logs.html#common] to the configured logger.
Constant Summary collapse
- FORMAT =
Common Log Format: http://httpd.apache.org/docs/1.3/logs.html#common
lilith.local - - [07/Aug/2006 23:58:02 -0400] "GET / HTTP/1.1" 500 -
%- %s [%s] "%s %s%s %s" %d %s\n %
The actual format is slightly different than the above due to the separation of SCRIPT_NAME and PATH_INFO, and because the elapsed time in seconds is included at the end.
%{%s - %s [%s] "%s %s%s%s %s" %d %s %0.4f }
Instance Method Summary collapse
-
#call(env) ⇒ Object
Log all requests in common_log format after a response has been returned.
-
#initialize(app, logger = nil) ⇒ CommonLogger
constructor
+logger+ can be any object that supports the +write+ or +<<+ methods, which includes the standard library Logger.
Constructor Details
#initialize(app, logger = nil) ⇒ CommonLogger
+logger+ can be any object that supports the +write+ or +<<+ methods, which includes the standard library Logger. These methods are called with a single string argument, the log message. If +logger+ is nil, CommonLogger will fall back env['rack.errors'].
29 30 31 32 |
# File 'vendor/bundler/ruby/3.4.0/bundler/gems/rack-40d68f842b5f/lib/rack/common_logger.rb', line 29 def initialize(app, logger = nil) @app = app @logger = logger end |
Instance Method Details
#call(env) ⇒ Object
Log all requests in common_log format after a response has been returned. Note that if the app raises an exception, the request will not be logged, so if exception handling middleware are used, they should be loaded after this middleware. Additionally, because 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.
41 42 43 44 45 46 47 |
# File 'vendor/bundler/ruby/3.4.0/bundler/gems/rack-40d68f842b5f/lib/rack/common_logger.rb', line 41 def call(env) began_at = Utils.clock_time status, headers, body = response = @app.call(env) response[2] = BodyProxy.new(body) { log(env, status, headers, began_at) } response end |