このページは福井県立大学の田中求之が2006年1月まで運用していた Mac のサーバ運用に関する会議室 「Web Scripter's Meeting」の記録です。情報が古くなっている可能性がありますのでご注意ください。

フォルダ毎にログを振り分ける

発言者:Junnama
( Date Saturday, December 02, 2000 01:48:09 )


例えば、rootの下にフォルダを3つ作っているとします。
それぞれのフォルダにアクセスされたときに、それぞれ別のログファイルを
作りたいと思った時に

1.サーバーのPreProseccerでフォルダのチェック
2.各フォルダ毎にログデータを作る
3.リクエストのあったファイルはそのままリプライする

という方法を考えた場合、

ログデータの保存の仕方で、例えばAppleScriptなら、ログファイルの(デー
タフォークのサイズを得て、書き込みの開始位置を指定してログをファイルの
末尾に書き込むことができますが、できればREALbasicでやりたいと思ってい
ます(ログはバイナリではなくテキストで保存したいと思っています)。

サーバーの話題というよりはREALbasicの話かもしれませんが、
ファイルの末尾にデータを追記していく方法はありますでしょうか?
ログファイルって結構大きくなりますから、一度読み込んでから処理するのは
避けたいと思います。

また、上記の方法にとらわれず、何かいい方法はありますでしょうか。

#これでやりたいことは伝わったのだろうか?

田中求之 さんからのコメント
( Saturday, December 02, 2000 23:02:47 )

>サーバーの話題というよりはREALbasicの話かもしれませんが、
>ファイルの末尾にデータを追記していく方法はありますでしょうか?

REALbasic でしたら、FolderItem の AppendToTextFile メソッドで、ファ
イルの末尾にテキストデータを書き加えていくことができます。

dim df as FolderItem
dim dt as TextOutputStream

df = GetFolderItem("my.log")
dt = df.AppendToTextFile
dt.write myLogData
dt.close

てな感じです。


なお、ログを独自に処理なさるのでしたら、PreProcessor ではなく、
PostProcessor で処理するほうがよいですよ。PreProcessor は、アクセス
の振り分けや前処理のものですから、ログの振り分けのようなアクセス自体
の処理に関係ない処理を入れて速度を落とすのは賢明ではありません。

PostProcessor でしたら、アクセス後に情報が一方的に送られてくる(リプ
ライの必要がない)ものですから、これでどんな処理をおこなっても、サイ
トのレスポンスを直接下げるようなことは起きません(PreProcessor は、
どうしても、レスポンスの低下を引き起こします。特に CGI 形式で作成し
た時には)。

Junnama さんからのコメント
( Monday, December 04, 2000 09:27:38 )

ありがとうございます。

方法が見えてきました。
PreProcessorで考えていたのは、いわゆるバーチャルドメインのような処理
と並行して行うことを考えていたからです。
リクエストされたドメイン毎に違うフォルダに振り分けながらログを記録して
いこうと考えていたのです。

>なお、ログを独自に処理なさるのでしたら、PreProcessor ではなく、
>PostProcessor で処理するほうがよいですよ。

アクセスの振り分けを、PreProcessorで、ログの振り分けをPostProcessorで
とか色々やってみます。

速度については、テストしながらどの方法が実用的かを判断しようと思いま
す。

Junnama さんからのコメント
( Saturday, December 30, 2000 18:16:44 )

バーチャルホスト部分はとりあえず簡易版ですができました(CGI形式)。
興味のおありの方は一度テストしてやってみて下さい(PPC版です)。

やっぱりレスポンスの低下はまぬがれませんね。
引き続きログの振り分けに挑戦します。

#この年の瀬に一体何をやってるんだか...

→  vHost.acgi

Tanny! さんからのコメント
( Thursday, January 04, 2001 19:11:04 )

商品版ですが、LogDoorというツールがあります。
やりたい事ってのは、こんな感じでしょうか?


→  The LogDoor Real-time Server Monitor

Junnama さんからのコメント
( Monday, January 08, 2001 06:10:26 )

ログのがやりたいことの主体ではないのですが、取り敢えず一通りのことはでき
ましたので登録しておきました。
バーチャルホストをPreProcessorで動かしながら、アイドルタイムに(一定時間
アクセスがなかったら)Threadによって一気に各フォルダ毎にログを追記してい
くという方法をとりました。バーチャルホストの処理についてもCONDITIONAL_GET
に対応させることと、処理対象外ファイルを拡張子で指定することができるよう
にしたので、レスポンス的にはかなり改善できました。

バーチャルホストを3つまで運用でき、バーチャルホスト毎にログの保存を行う
CGIです。Web共有とQuid Pro Quoで動作確認済です(PPC版)。

→  vHost.acgiその2