先日触ってみたSemantic Logging Application Blockですが、ちょっと手を加えるだけでAzureのStorageやSQL Serverにログが吐き出せます。今回は、AzureのStorageに吐き出してみたいと思います。
Azureに適当にストレージを作ったらVisual Studioのサーバーエクスプローラから接続文字列を取得しておきます。そして、NuGetでEnterpriseLibrary Semantic Azureあたりで検索して「Semantic Logginc Application Block - Azure Sink」を追加します。
前回のプログラムのLogToConsoleをLogToWindowsAzureTableに変えます。引数のインスタンス名は適当でOKで、第二引数に接続文字列を渡します。
プログラムはこんな感じ。
// リスナー作って var l = new ObservableEventListener(); // 監視するログの種類を設定して l.EnableEvents( MyEventSource.Log, EventLevel.Verbose, MyEventSource.Keywords.Diagnostic | MyEventSource.Keywords.Lifecycle); // Windows Azure Storage ServiceのTableに出力する l.LogToWindowsAzureTable("インスタンス名", // 接続文字列"DefaultEndpointsProtocol=https;AccountName=semanticsample;" + "AccountKey=IG4TJGmpV7Mt+VSwPACIuiVIYLrZQXyI9y98/m2O/excbpS6+GLNUDl2MyfB6K3z28IlevlTT7O/difd/ZGs/g=="); MyEventSource.Log.Start(); for (int i = 0; i < 1000; i++) { MyEventSource.Log.Query("select * from dual"); Thread.Sleep(10); } MyEventSource.Log.Stop();
実行すると、Azureのストレージのテーブルにちゃんとログが出てるのが確認できます。(クライアントでバッファリングしてるので、最後のほうのログは抜け落ちてます。今回みたいな単発Exeには向かないのでWebアプリとかで使うのがよさそうですね)