しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

IIS 8.5 でログに特定のクッキーだけを出力する

IIS ログに特定の名前のクッキーだけを書きだしたい人生だったので、URL Rewrite を使って実現してみました。IIS 8.5 からカスタムフィールドの追加が出来るようになったので、それを組み合わせます。

考え方としては URL Rewrite でクッキーの値をサーバー変数に追加して、IIS ログに出力します。

URL Rewrite でサーバー変数に書きだす

URL Rewrite の条件として HTTP_COOKIE の中身を正規表現でキャプチャして、そのキャプチャした値をサーバー変数側で参照する感じです。アクションは無しにします。

f:id:shiba-yan:20150405182220p:plain

ちなみに 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 から追加します。

f:id:shiba-yan:20150405182312p:plain

これで URL Rewrite Module が session というクッキー名の値を SESSION_VALUE というサーバー変数に書きだしてくれます。サーバー変数の許可は忘れがちなので注意。

IIS 8.5 のカスタムフィールドで出力

URL Rewrite で書きだされたサーバー変数を、IIS のカスタムフィールド設定からログに書きだすように設定を追加します。W3C 形式じゃないと指定できません。

f:id:shiba-yan:20150405182345p:plain

設定後、適当にクッキーを設定してからページにアクセスして試します。

f:id:shiba-yan:20150405184715p:plain

これで IIS ログに session クッキーの値だけが出力されるようになりました。URL Rewrite は結構使いどころが多いので、もうちょっと真面目に検証しておきたいですね。