Module: WEBrick::AccessLog
- Defined in:
- lib/webrick/accesslog.rb
Overview
AccessLog provides logging to various files in various formats.
Multiple logs may be written to at the same time:
access_log = [
[$stderr, WEBrick::AccessLog::COMMON_LOG_FORMAT],
[$stderr, WEBrick::AccessLog::REFERER_LOG_FORMAT],
]
server = WEBrick::HTTPServer.new :AccessLog => access_log
Custom log formats may be defined. WEBrick::AccessLog provides a subset of the formatting from Apache’s mod_log_config httpd.apache.org/docs/mod/mod_log_config.html#formats. See AccessLog::setup_params for a list of supported options
Defined Under Namespace
Classes: AccessLogError
Constant Summary collapse
- CLF_TIME_FORMAT =
The Common Log Format’s time format
"[%d/%b/%Y:%H:%M:%S %Z]"
- COMMON_LOG_FORMAT =
Common Log Format
"%h %l %u %t \"%r\" %s %b"
- CLF =
Short alias for Common Log Format
COMMON_LOG_FORMAT
- REFERER_LOG_FORMAT =
Referer Log Format
"%{Referer}i -> %U"
- AGENT_LOG_FORMAT =
User-Agent Log Format
"%{User-Agent}i"
- COMBINED_LOG_FORMAT =
Combined Log Format
"#{CLF} \"%{Referer}i\" \"%{User-agent}i\""
Class Method Summary collapse
-
.escape(data) ⇒ Object
Escapes control characters in
data
. -
.format(format_string, params) ⇒ Object
Formats
params
according toformat_string
which is described in setup_params. -
.setup_params(config, req, res) ⇒ Object
This format specification is a subset of mod_log_config of Apache:.
Class Method Details
.escape(data) ⇒ Object
Escapes control characters in data
151 152 153 154 155 |
# File 'lib/webrick/accesslog.rb', line 151 def escape(data) data = data.gsub(/[[:cntrl:]\\]+/) {$&.dump[1...-1]} data.untaint if RUBY_VERSION < '2.7' data end |
.format(format_string, params) ⇒ Object
Formats params
according to format_string
which is described in setup_params.
123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 |
# File 'lib/webrick/accesslog.rb', line 123 def format(format_string, params) format_string.gsub(/\%(?:\{(.*?)\})?>?([a-zA-Z%])/){ param, spec = $1, $2 case spec[0] when ?e, ?i, ?n, ?o raise AccessLogError, "parameter is required for \"#{spec}\"" unless param (param = params[spec][param]) ? escape(param) : "-" when ?t params[spec].strftime(param || CLF_TIME_FORMAT) when ?p case param when 'remote' escape(params["i"].peeraddr[1].to_s) else escape(params["p"].to_s) end when ?% "%" else escape(params[spec].to_s) end } end |
.setup_params(config, req, res) ⇒ Object
This format specification is a subset of mod_log_config of Apache:
- %a
-
Remote IP address
- %b
-
Total response size
- %evariable
-
Given variable in ENV
- %f
-
Response filename
- %h
-
Remote host name
- %headeri
-
Given request header
- %l
-
Remote logname, always “-”
- %m
-
Request method
- %attrn
-
Given request attribute from
req.attributes
- %headero
-
Given response header
- %p
-
Server’s request port
- %formatp
-
The canonical port of the server serving the request or the actual port or the client’s actual port. Valid formats are canonical, local or remote.
- %q
-
Request query string
- %r
-
First line of the request
- %s
-
Request status
- %t
-
Time the request was received
- %T
-
Time taken to process the request
- %u
-
Remote user from auth
- %U
-
Unparsed URI
- %%
-
Literal %
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/webrick/accesslog.rb', line 95 def setup_params(config, req, res) params = Hash.new("") params["a"] = req.peeraddr[3] params["b"] = res.sent_size params["e"] = ENV params["f"] = res.filename || "" params["h"] = req.peeraddr[2] params["i"] = req params["l"] = "-" params["m"] = req.request_method params["n"] = req.attributes params["o"] = res params["p"] = req.port params["q"] = req.query_string params["r"] = req.request_line.sub(/\x0d?\x0a\z/o, '') params["s"] = res.status # won't support "%>s" params["t"] = req.request_time params["T"] = Time.now - req.request_time params["u"] = req.user || "-" params["U"] = req.unparsed_uri params["v"] = config[:ServerName] params end |