Module WEBrick::AccessLog
In: lib/webrick/accesslog.rb

Methods

escape   format   setup_params  

Classes and Modules

Class WEBrick::AccessLog::AccessLogError

Constants

CLF_TIME_FORMAT = "[%d/%b/%Y:%H:%M:%S %Z]"
COMMON_LOG_FORMAT = "%h %l %u %t \"%r\" %s %b"
CLF = COMMON_LOG_FORMAT
REFERER_LOG_FORMAT = "%{Referer}i -> %U"
AGENT_LOG_FORMAT = "%{User-Agent}i"
COMBINED_LOG_FORMAT = "#{CLF} \"%{Referer}i\" \"%{User-agent}i\""

Public Instance methods

[Source]

    # File lib/webrick/accesslog.rb, line 67
67:     def escape(data)
68:       if data.tainted?
69:         data.gsub(/[[:cntrl:]\\]+/) {$&.dump[1...-1]}.untaint
70:       else
71:         data
72:       end
73:     end

[Source]

    # File lib/webrick/accesslog.rb, line 49
49:     def format(format_string, params)
50:       format_string.gsub(/\%(?:\{(.*?)\})?>?([a-zA-Z%])/){
51:          param, spec = $1, $2
52:          case spec[0]
53:          when ?e, ?i, ?n, ?o
54:            raise AccessLogError,
55:              "parameter is required for \"#{spec}\"" unless param
56:            (param = params[spec][param]) ? escape(param) : "-"
57:          when ?t
58:            params[spec].strftime(param || CLF_TIME_FORMAT)
59:          when ?%
60:            "%"
61:          else
62:            escape(params[spec].to_s)
63:          end
64:       }
65:     end

This format specification is a subset of mod_log_config of Apache.

  http://httpd.apache.org/docs/mod/mod_log_config.html#formats

[Source]

    # File lib/webrick/accesslog.rb, line 25
25:     def setup_params(config, req, res)
26:       params = Hash.new("")
27:       params["a"] = req.peeraddr[3]
28:       params["b"] = res.sent_size
29:       params["e"] = ENV
30:       params["f"] = res.filename || ""
31:       params["h"] = req.peeraddr[2]
32:       params["i"] = req
33:       params["l"] = "-"
34:       params["m"] = req.request_method
35:       params["n"] = req.attributes
36:       params["o"] = res
37:       params["p"] = req.port
38:       params["q"] = req.query_string
39:       params["r"] = req.request_line.sub(/\x0d?\x0a\z/o, '')
40:       params["s"] = res.status       # won't support "%>s"
41:       params["t"] = req.request_time
42:       params["T"] = Time.now - req.request_time
43:       params["u"] = req.user || "-"
44:       params["U"] = req.unparsed_uri
45:       params["v"] = config[:ServerName]
46:       params
47:     end

[Validate]