Class: Rack::CommonLogger
- Inherits:
-
Object
- Object
- Rack::CommonLogger
- Defined in:
- lib/rack/commonlogger.rb
Overview
Rack::CommonLogger forwards every request to an app
given, and logs a line in the Apache common log format to the logger
, or rack.errors by default.
Instance Method Summary collapse
-
#<<(str) ⇒ Object
By default, log to rack.errors.
- #_call(env) ⇒ Object
- #call(env) ⇒ Object
- #each ⇒ Object
-
#initialize(app, logger = nil) ⇒ CommonLogger
constructor
A new instance of CommonLogger.
Constructor Details
#initialize(app, logger = nil) ⇒ CommonLogger
Returns a new instance of CommonLogger.
7 8 9 10 |
# File 'lib/rack/commonlogger.rb', line 7 def initialize(app, logger=nil) @app = app @logger = logger end |
Instance Method Details
#<<(str) ⇒ Object
By default, log to rack.errors.
25 26 27 28 |
# File 'lib/rack/commonlogger.rb', line 25 def <<(str) @env["rack.errors"].write(str) @env["rack.errors"].flush end |
#_call(env) ⇒ Object
16 17 18 19 20 21 22 |
# File 'lib/rack/commonlogger.rb', line 16 def _call(env) @env = env @logger ||= self @time = Time.now @status, @header, @body = @app.call(env) [@status, @header, self] end |
#call(env) ⇒ Object
12 13 14 |
# File 'lib/rack/commonlogger.rb', line 12 def call(env) dup._call(env) end |
#each ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/rack/commonlogger.rb', line 30 def each length = 0 @body.each { |part| length += part.size yield part } @now = Time.now # Common Log Format: http://httpd.apache.org/docs/1.3/logs.html#common # lilith.local - - [07/Aug/2006 23:58:02] "GET / HTTP/1.1" 500 - # %{%s - %s [%s] "%s %s%s %s" %d %s\n} % @logger << %{%s - %s [%s] "%s %s%s %s" %d %s %0.4f\n} % [@env["REMOTE_ADDR"] || "-", @env["REMOTE_USER"] || "-", @now.strftime("%d/%b/%Y %H:%M:%S"), @env["REQUEST_METHOD"], @env["PATH_INFO"], @env["QUERY_STRING"].empty? ? "" : "?"+@env["QUERY_STRING"], @env["HTTP_VERSION"], @status.to_s[0..3], (length.zero? ? "-" : length.to_s), @now - @time ] end |