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 相当を作るべきだという気もしてきまし
た。
--
ごとうゆうぞう