Class: Rack::LtsvLogger

Inherits:
Object
  • Object
show all
Defined in:
lib/rack/ltsv_logger.rb

Instance Method Summary collapse

Constructor Details

#initialize(app, logger = nil, appends = {}) ⇒ LtsvLogger

Returns a new instance of LtsvLogger.



5
6
7
8
9
# File 'lib/rack/ltsv_logger.rb', line 5

def initialize(app, logger=nil, appends = {})
  @app = app
  @logger = logger || $stdout
  @appends = appends
end

Instance Method Details

#call(env) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/rack/ltsv_logger.rb', line 11

def call(env)
  began_at = Time.now.instance_eval { to_i + (usec/1000000.0) }

  status, headers, body = @app.call(env)
ensure
  now = Time.now
  reqtime = now.instance_eval { to_i + (usec/1000000.0) } - began_at

  params = {
    time: now.iso8601,
    pid: Process.pid,
    host: env["REMOTE_ADDR"] || "-",
    forwardedfor: env['HTTP_X_FORWARDED_FOR'] || "-",
    user: env["REMOTE_USER"] || "-",
    method: env["REQUEST_METHOD"],
    uri: env["PATH_INFO"],
    query: env["QUERY_STRING"].empty? ? "" : "?"+env["QUERY_STRING"],
    protocol: env["HTTP_VERSION"],
    status: extract_status(status),
    size: extract_content_length(headers),
    reqtime: "%0.6f" % reqtime,
  }
  @appends.each do |key, proc|
    params[key] = proc.call(env)
  end
  @logger.write ltsv(params)

  [status, headers, body]
end