銀の光と碧い空

クラウドなインフラとC#なアプリ開発の狭間にいるエンジニアの日々

IIS の HttpModule で EventSource を使ってデバッグしてみる

突然ですが、IIS にカスタムHTTPモジュールを追加することができます。

チュートリアル : カスタム HTTP モジュールを作成および登録する

が、これ絡みでバグが起きたのでデバッグしようと思ったのですが、割と手段がなくてつらたんでした...

そこで、今回はこれをEventSource クラスによるログ出力を使ってデバッグしてみました。

EventSource クラス (System.Diagnostics.Tracing)

この説明にあるとおり、ETWに書きこむためのクラスになります。ETWについては、以下のエントリがわかりやすく、続きを期待しているところです。

ちなみに、.NET Framework 4.5以降で使えます。そしてなによりのメリットが追加のライブラリが不要なことです。EventSourceクラスは継承してロギング用の専用のクラスを作成して使います。シンプルな例だとこんな感じになります。

あとは、これを使って適当なところにデバッグ処理を書くとETWに書きこんでくれます。

とりあえずprintf デバッグですが、ログのAPIを追加することも可能です。

で、ETWに書きこまれたログを確認するほうほうですが、SLABのOut-of-Processを使って、ConsoleSinkやFlatFileSinkを使う方法もありますし、

PerfView というツールを使う方法もあります。

Download PerfView from Official Microsoft Download Center

意外とEventSourceの使いどころは多そうです。