Apacheのhttpd.confのCustomLogに、環境変数を複数指定したい

OKWave 2008年01月31日 14時00分

  • このエントリーをはてなブックマークに追加
Apacheのhttpd.confのCustomLogに、環境変数を複数指定したい

初めて質問させていただきます。至らない点もあるかと思いますが宜しくお願いいたします。

似たような質問を探している人がいるかもしれませんので、まず一般的な質問をさせていただきます。Apache2の設定ファイルのhttpd.confに、CustomLogという設定項目がありますが、このCustomLogの書式は


CustomLog [ログファイルパス] [書式] [env=***]

という3つの引数を取るということでいいと思うのですが、この[env=***]のところに、不一致の判定と一致の判定を指定したいのです。

例えばこんな状況です

1) SetEnvIf [判定の条件式1] [環境変数A] [環境変数X]
2) SetEnvIf [判定の条件式2] [環境変数B] [環境変数X]
3) SetEnvIf [判定の条件式3] [環境変数B] [環境変数X]
と、SetEnvIfで環境変数を2個ずつ指定した後、

CustomLog logs/[ログファイルA] combined env=[環境変数A] ←1) に一致で書き込み
CustomLog logs/[ログファイルB] combined env=[環境変数B] ←2,3) に一致で書き込み
CustomLog logs/[ログファイルX] combined env=![環境変数X] ←1,2,3) に不一致で書き込み

となることは分かるのですが、上の例だと不一致と一致を同時に指定することはできません。そのような場合はSetEnvIfの判定条件を工夫するのでしょうか?

私の場合の具体的な質問はこうです。
「WMVファイルだけのアクセスログファイルを作りたい」
「かつ、家庭内LANからのアクセスログは排除したい」
と思い、下のように設定したのですが、


#家庭内LANからのログを排除するための環境変数
SetEnvIf Remote_Addr 192.168.0. nolog
#WMVファイルのログを取るための環境変数
SetEnvIf Request_URI \.wmv$ wmv-files

このように設定すると、最初の例のように、不一致と一致のログをうまく作れません。

長くなってしまってまとまりがありませんが、何分素人なのでこれが限界です。。どうか回答のほど宜しくお願いいたします。

良回答

失礼いたしました。
QNo.3601206の一部をコピーして使用しましたので、ご指摘のように先頭にマッチさせるメタ文字になってしまったものと思います。
「^/string/」という記述を行なって、stringの否定を表現したかったものです。

以下の記述ではどうなりますでしょうか?


SetEnvIf Remote_Addr "192.168.0." nolog
SetEnvIf Request_URI "^/wmv/" nolog (または "^/.wmv/")

CustomLogには env=!nolog のようにenvを否定形で指定する。

  • このエントリーをはてなブックマークに追加
関連キーワード
OS

SpecialPR