Webrick log remote port: %{remote}p

$B$=$N$&$A!“%m%0$K%]!<%H$b4^$a$m$H$$$o$l$k>p@*$K$J$k$h$&$J46$8$,$9$k$N$G!”(B
WEBrick $B$G$b(B Apache $BF1MM!“(B%{remote}p $B$G%j%b!<%H(B
($B%/%i%$%”%s%H(B) $B$N%]!<%H$r(B
$B%m%0$K=P$;$k$h$&$K$9$k$N$O$I$&$G$7$g$&!#(B

$B%Q%C%A$rEv$F$k$H!“0J2<$N$h$&$K!”(B%{remote}p
$B$,;H$($k$h$&$K$J$j$^$9!#(B
($BEv$F$J$$8=>u$G$O!">o$K%5!<%PB&$N%]!<%H(B 10080 $B$,=P$F$-$^$9!#(B)

% ./ruby -Ilib -rwebrick -e ’
srv = WEBrick::HTTPServer.new(
{:DocumentRoot => “/”,
:AccessLog => [[ $stderr, “%{remote}p” ]],
:BindAddress=>“127.0.0.1”,
:Port => 10080})
trap(“INT”) { srv.shutdown }
srv.start’
[2010-12-02 18:05:19] INFO WEBrick 1.3.1
[2010-12-02 18:05:19] INFO ruby 1.9.3 (2010-11-29) [i686-linux]
[2010-12-02 18:05:19] INFO WEBrick::HTTPServer#start: pid=17333
port=10080
34648
34649

http://httpd.apache.org/docs/2.2/en/mod/mod_log_config.html
$B$K$h$l$P!“(BApache $B$OB>$K(B %{canonical}p $B$H(B %{local}p
$B$,$”$k$h$&$G$9$,!“(B
$B$”$^$j??LLL$K9M$($F$$$J$$$N$G!"%Q%C%A$G$I$&$K$+$9$k$N$O(B %{remote}p
$B$@$1$G$9!#(B

$B$J$*!“(BApache $B$K(B %{remote}p
$B$,F~$C$?$N$O%G%s%^!<%/$G%]!<%H$N%m%0$,(B
$BMW5a$5$l$k$h$&$K$J$C$?$+$i!”$H$$$&OC$G$9!#(B
http://marc.info/?l=apache-httpd-dev&m=119011115507885&w=4

IPv6 $B4X78$GOC$,=P$F$/$k(B NAT (LSN, CGN)
$B$b1F6A$9$k$+$b$7$l$^$;$s!#(B
http://www.geekpage.jp/blog/?id=2008/7/28/1

Index: lib/webrick/accesslog.rb

— lib/webrick/accesslog.rb (revision 29971)
+++ lib/webrick/accesslog.rb (working copy)
@@ -56,6 +56,13 @@
(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