Index: [Article Count Order] [Thread]

Date: Wed, 04 Sep 2002 01:08:24 +0900 (JST)
From: GOTOU Yuuzou <gotoyuzo@notwork.org>
Subject: [webrickja:50] Re: Common Log Format
To: webrickja@notwork.org
Message-Id: <20020904.010824.45251186.gotoyuzo@kotetsu.does.notwork.org>
In-Reply-To: <20020829030918.54e069b9.keita@kyomu.info>
References: <20020829030918.54e069b9.keita@kyomu.info>
X-Mail-Count: 00050

In message <20020829030918.54e069b9.keita@kyomu.info>,
 `keita yamaguchi <keita@kyomu.info>' wrote:
> 既に誰かつくっていそうな気がするんですが、
> webalizerなどのツールを利用したいなと思って
> webrickのログをCommon Log Formatで記録するための
> ライブラリをつくってみました。

できれば本体に取り込んでいきたいと思います。

前に考えたときは、フォーマット文字列の変換が面倒でやめてしまっ
たような気がするので、CLF::access は目から鱗です。

> 例としては
> --------------------------------------------------
> require "webrick"
> require "webrick/log/clf"
> include WEBrick
> 
> CLF::CLF.new
> CLF::Combined.new({:Access => "combined.log"})
> CLF::Custom.new("%m %q")
> CLF::Container.new(
>   "message.log", [CLF::CLF, [CLF::Referer, "referer.log"]]
> )
> --------------------------------------------------
> こんな感じになります。
> あとは WEBrick::Log と同様に使えます。

Container.new はちょっと複雑だと思います。
これは、例えば次のように config[:AccessLog] に配列を指定したら 
HTTPServer#access_log で順番に出力するくらいでもよさそうな気が
します。

  :AccessLog => [
     CLF::CLF.new("access_log"),
     CLF::Referer.new("referer"),
  ]

あるいはフォーマッタは出力クラスから分離させて、

  :AccessLog => [
     [ Log::new("access_log"), COMMON_LOG_FORMAT_STRING ],
     [ Log::new("referer"), REFERER_LOG_FORMAT_STRING ],
  ]

という感じにすれば、追加が少なくて済みそうです。
しかし、この場合は、WEBrick::Log がタイムスタンプとか余計な出
力をしてしまうのがネックになってしまうのですね。

もうすこし控え目な Log クラスを作るべき、いや、控え目なほうを
継承するなりして今の Log 相当を作るべきだという気もしてきまし
た。

-- 
ごとうゆうぞう