def self.format(messg, request, response, curr_time)
messg.gsub(/%{.*?}[io]|%./) { |fmt|
case (fmt)
when '%%'
'%'
when '%a'
request.client_address
when '%A'
request.server_address
when '%B'
response.send_size.to_s
when '%b'
b = response.send_size
(b > 0) ? b.to_s : '-'
when '%D'
'-'
when '%f'
response.local_path || '-'
when '%h'
request.client_name
when '%l'
'-'
when '%m'
request.method
when '%p'
request.server_port.to_s
when '%P'
$$.to_s
when '%q'
q = request.query
(q) ? "?#{q}" : ''
when '%r'
request.line
when '%s'
response.status.to_s
when '%t'
curr_time.httpdate
when '%T'
'-'
when '%u'
'-'
when '%U'
request.path
when '%v'
request.host
when /^%{.*}i$/
name = $&[2...-2]
request.header(name) || '-'
when /^%{.*}o$/
name = $&[2...-2]
response.header(name) || '-'
else
fmt
end
}
end