module WEBrick::AccessLog
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
Constants
Public Instance Methods
Escapes control characters in data
# 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
Formats params according to format_string which is described in setup_params.
# 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
This format specification is a subset of mod_log_config of Apache:
- %a
- 
Remote IP address 
- %b
- 
Total response size 
- %e{variable}
- 
Given variable in ENV
- %f
- 
Response filename 
- %h
- 
Remote host name 
- %{header}i
- 
Given request header 
- %l
- 
Remote logname, always “-” 
- %m
- 
Request method 
- %{attr}n
- 
Given request attribute from req.attributes
- %{header}o
- 
Given response header 
- %p
- 
Server's request port 
- %{format}p
- 
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
- 
Timethe request was received
- %T
- 
Timetaken to process the request
- %u
- 
Remote user from auth 
- %U
- 
Unparsed URI
- %%
- 
Literal % 
# 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