かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

EnterpriseLibrary 6のSemantic Logging Application BlockでAzure Storageにログをはく

先日触ってみた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アプリとかで使うのがよさそうですね)

f:id:okazuki:20140713111944j:plain