none
AzureログがWADLogsTableへ転送されない。 RRS feed

  • 質問

  • お世話になっております。

    DiagnosticMonitorTraceListenerクラスを利用した「WADLogsTable」へのログ転送がおこなわれません。

    正確には、1度目に出力したログしか転送が行われないのですが、何が原因か分かりません。

    ご教授願えないでしょうか?

    【環境】

    ・VS2010 Ultimate 日本語版 

     AzureSDK1.2

    【実行環境】

    Development Fabric と 本番環境 の両環境で試しました。

    【事象】

    WebRole.cs と Default.aspxのPageLoadメソッドで出力したログ情報しか、WADLogsTableへ転送されません。

    Default.aspxは、PageLoadメソッドの他のメソッドでも、ログを出力しています。

    また、Default.aspxから遷移する画面でもログを出力しています。

    ログ出力には、System.Diagnostics.Trace.TraceInformation() を利用しています。

    Development Fabricのコンソールには出力したログが表示されています、

    例外は出ずに正常に動作します。

    【追記】出力するログには、日本語は入れていません。

    【DiagnosticMonitorConfigurationの定義内容】

    DiagnosticMonitorConfiguration DiagnosticConfig = DiagnosticMonitor.GetDefaultInitialConfiguration();

    DiagnosticConfig.Logs.ScheduledTransferPeriod = System.TimeSpan.FromMinutes(Interval);
    DiagnosticConfig.Logs.ScheduledTransferLogLevelFilter = LogLevel.Undefined;
    DiagnosticConfig.OverallQuotaInMB = 8073;
    DiagnosticConfig.Logs.BufferQuotaInMB = 5000;

    DiagnosticMonitor.Start("DiagnosticsConnectionString", DiagnosticConfig);

    【Web.configの定義内容】

    <system.diagnostics>
        <trace>
          <listeners>
            <add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=1.0.0.0, Culture=neutral, PublicKeyToken=XXXXXXXXXXXXXX(文字列が入っています)"
              name="AzureDiagnostics">
            </add>
          </listeners>
        </trace>
      </system.diagnostics>

    単なるプログラムの実装ミスなのでしょうか??

    気になっている点として、ログ出力を実行しているクラスは別クラスで行っていることが気になっています。。。

    →各画面の各メソッドから自作のログ出力共通クラスをnewして呼び出し、ログ出力しています。

    各画面クラスでログ出力すると、ログ転送が行われています・・・


    2011年4月1日 6:30

回答

すべての返信

  • こんにちは。

     

    自作のログ出力用クラスにて System.Diagnostics.Trace.Listeners にリスナーを追加してあげると良いかもです。(未検証)
    こちらのフォーラムを参考にされては如何でしょうか。
    http://social.msdn.microsoft.com/Forums/en/windowsazure/thread/2217654d-5c86-44da-b0bf-30753f9e9ad1

    以下引用

    protected void TraceSomething()
    {
    	System.Diagnostics.Trace.Listeners.Add(new Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener());
    	System.Diagnostics.Trace.AutoFlush = true;
    
    System.Diagnostics.Trace.WriteLine("Jeeves and Wooster");
     
    }
    


    2011年4月1日 7:35
    モデレータ
  • k.buchi様、返信ありがとうございます!

    紹介して頂いた、フォーラムを参考に検証してみました。

    結果は、自作のログ出力用クラスのログが出力されました!

    ただ、同じログが2回出力されるという現象に陥っており、原因を調査中です。。。

    正確には、WebRole.csと各画面.aspxのPageLoadメソッドで出力しているログが1件余分に出力されます。

    System.Diagnostics.Trace.Listenersの中に、

    Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListenerが2つ入ってしまっていることが原因かも知れません。

    しかし、Web.configの定義を削除すると、また最初の症状に戻ってしまいます。

    引き続き検証してみたいと思います・・・・

    2011年4月1日 12:05
  • 引き続き、検証してみた結果、開発環境+本番Storage Tableへは想定とおりにログを出力することができました。

    しかし、Auzre環境 + 本番Storageでは、うまくいきません。。。

    ログが出力されたりされなかったり、Tableへの転送時間にムラがあったり、もうどうなってるかわけが分からない状態です・・・。

    (短時間でかなりログを出力しているので、その当たりが原因のような気もしますが。)

    継続調査を行い、どうしても原因が分からないようであれば、自作のログTableを作成しようと思います。

    当質問は回答マークを付けて終了したいと思います。ありがとうございました!


    2011年4月4日 6:31
  • こんにちは。完全に解決ではなかったのですね。

    ログの転送時間の間隔を大目にとる等もありかもしれないですね。。。
    直接Storageへの出力は監査系のログ等ロストが許されない場合等によっては(今回のように応急処置ではなく)必要ですので、必要に応じて検討頂ければ幸いです。

     

    2011年4月4日 6:47
    モデレータ
  • k.buchi様、返信ありがとうございます!

    情報提供をして頂いたのに、すいません。。。

    時間の都合で調査を一度中止し、代替案(独自Table)へ変えることになりそうです。

    また時間を作って、もう一度調査をしてみようと思います!

    いつも思いますが、開発環境で上手くいって、本番で上手く行かないと精神的にきますね・・・(笑泣)

    2011年4月4日 7:01