From: Tanaka Akira Date: 2010-12-02T18:30:40+09:00 Subject: [ruby-dev:42670] webrick log remote port: %{remote}p そのうち、ログにポートも含めろといわれる情勢になるような感じがするので、 WEBrick でも Apache 同様、%{remote}p でリモート (クライアント) のポートを ログに出せるようにするのはどうでしょう。 パッチを当てると、以下のように、%{remote}p が使えるようになります。 (当てない現状では、常にサーバ側のポート 10080 が出てきます。) % ./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 によれば、Apache は他に %{canonical}p と %{local}p があるようですが、 あまり真面目に考えていないので、パッチでどうにかするのは %{remote}p だけです。 なお、Apache に %{remote}p が入ったのはデンマークでポートのログが 要求されるようになったから、という話です。 http://marc.info/?l=apache-httpd-dev&m=119011115507885&w=4 IPv6 関係で話が出てくる NAT (LSN, CGN) も影響するかもしれません。 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 -- [田中 哲][たなか あきら][Tanaka Akira]