IIS ログに特定の名前のクッキーだけを書きだしたい人生だったので、URL Rewrite を使って実現してみました。IIS 8.5 からカスタムフィールドの追加が出来るようになったので、それを組み合わせます。
考え方としては URL Rewrite でクッキーの値をサーバー変数に追加して、IIS ログに出力します。
URL Rewrite でサーバー変数に書きだす
URL Rewrite の条件として HTTP_COOKIE の中身を正規表現でキャプチャして、そのキャプチャした値をサーバー変数側で参照する感じです。アクションは無しにします。
ちなみに Web.config には以下のように出力されます。設定自体はとてもシンプルです。
<rule name="CookieToLog"> <match url=".*" /> <conditions> <add input="{HTTP_COOKIE}" pattern="session=([^;$]+)" /> </conditions> <serverVariables> <set name="SESSION_VALUE" value="{C:1}" /> </serverVariables> <action type="None" /> </rule>
サーバー変数の書き換えはホワイトリストでの許可制になっているので、新しく追加するサーバー変数名を IIS Manager から追加します。
これで URL Rewrite Module が session というクッキー名の値を SESSION_VALUE というサーバー変数に書きだしてくれます。サーバー変数の許可は忘れがちなので注意。
IIS 8.5 のカスタムフィールドで出力
URL Rewrite で書きだされたサーバー変数を、IIS のカスタムフィールド設定からログに書きだすように設定を追加します。W3C 形式じゃないと指定できません。
設定後、適当にクッキーを設定してからページにアクセスして試します。
これで IIS ログに session クッキーの値だけが出力されるようになりました。URL Rewrite は結構使いどころが多いので、もうちょっと真面目に検証しておきたいですね。