- Communications
- Entertainment
- Developer Tools
このページでは、データベースを自分で定義したり変更したりするために必要な知識を説明します。
このページを理解するには、IIS のログファイルとデータベースの知識が必要です。もしカスタマイズをせずに 標準の wwwlog.mdb だけを使うのであれば、このページは飛ばしてもかまいません。
弊社にて wlog をベースにしたカスタム ソリューションをご提供しておりますので、ご興味のある方は サポート までお問い合わせください。
項目名の突合せ
wlog はログファイルを一行ずつ読みながら、下記の動作を行います。
- 行が #Fields: で始まっていれば、その行はその後に続く行の項目名の定義行と認識します。
- そうでなければ、各項目をそれぞれ最後に見つかった #Fields: の行の定義に従って、項目分けします。
- 項目名に英数字、および下線以外の文字が含まれていれば、それらの文字は下線で置き換えられます。例えば、cs(UserAgent) は cs_UserAgent_ になります。
- それぞれの項目名に一致する名前の列が表にあれば書き込みます。
Date および Time について
Date および Time については、IIS ではフィールドが分かれていますが、データベースでは通常ひとつのフィールドとして定義されるので、他のフィールドと若干異なる動作をします。
- ログファイル中で Date と Time が連続したフィールドとして記録されている場合(IIS のログ プロパティで Date をオンにすると通常こうなります)、二つのフィールドを連結して日付/時刻型として、Date という名前の列に書き込みます。
- Date がログファイルに記録されていない場合、#Date: の行の日付を使って日付/時刻型として、Date という名前の列に書き込みます。
上記の動作をするため、データベースに Time という名前の列を作成しても、その列には記録されません。 代わりに Date という名前の列に日付と時刻が記録されます。
変数
ログファイル中にないデータを書き込めるように、wlog は変数に対応しています。
一行分のデータを書き込む時に、変数名と同じ名前のフィールドがテーブルにあれば、wlog はそれを一緒に書き込みます。この機能と、-e オプション を使って、コマンドラインからデータを書き込むことができます。
例えば、-e site=MySite というオプションを指定して起動した場合、テーブルに site という名前のフィールドがあれば、そのときに作られたレコードにはすべて MySite というデータが書き込まれます。
また、wlog は下記の変数を自動的に定義します。 これらの変数を使って、どのレコードがどのログファイルから取り込まれたかを記録することができます。
filename | ログファイルの名前です。 |
logpath | ログファイルのパスです。コマンドラインで指定したとおりの文字列が入ります。 |
外部参照テーブル
ログファイルには、URL や User Agent 文字列など、同じ文字列が何回も現れる場合があるので、管理や分析を容易にし、データベースをより小さくするため、wlog は外部参照テーブルに対応しています。
外部参照テーブルとは、文字列そのものを別のテーブルに書き込み、その ID だけをログ書き込み用テーブルに書き込むことです。 これにより、同じ文字列が何回もログファイル中に現れても、データベース中には一度だけ書き込めば済むようになります。
行とログファイルの突合せ
同じログファイルを重複して読み込んでしまうのを防ぐため、表中の行からその行がどのログファイルから作られたかを知る必要があります。
一台のサーバーでひとつのサイトを運営している場合にはログファイルはファイル名だけで一意になりますが、複数のサイトを管理するようになったり、複数のサーバーで処理を分担している場合には一意になりません。 この場合、データベース中の表に site や server といった名前の列を作り、 そのサイトやサーバーのログファイルを取り込む時に -e オプション でそれらの 変数 を指定することで、その行がどのサイトのどのサーバーのログファイルから取り込まれたかを 記録することができます。
wlog は、同じログファイルの重複取り込みを防ぐため、 ログファイルを読む前にデータベースからそのログファイルから取り込まれた行がないかどうかを確認します。
表のどの列を使って元のログファイルと付き合わせるかは、-m オプション で指定します。 下にその使い方の例を示します。
-m filename | テーブルに filename というフィールドを作っておけば、自動的に定義される変数 によってその列にログファイルのファイル名が書き込まれます。 サイトがひとつでサーバーもひとつであればこのフィールドだけでログファイルを認識できることを指定しています。 |
-m site,filename | 複数のサイトをひとつのデータベースに入れる場合、同じファイル名のログファイルが複数現れるので、ここでは site という列を表に追加し、-e オプション を使って取り込むことにしたとします。この場合にはこの例のように両方のフィールドをカンマで区切って指定し、wlog に突合せ方法を教えてやることで、正しい重複確認ができます。 |