2011-08-11 11 views
4

私はAzure WorkerRole()を開発中です。 Compute Emulatorコンソールでは、すべてのTrace.WriteLine()メッセージが表示されますが、OnStart()で生成されたメッセージだけがストレージに保存されているようです。Trace.WriteLine()Azure WorkerRoleのOnStart()でのみ維持されるメッセージ

私ServiceConfiguration.Local.csfgがあります

<Role name="MyWorkerRole"> 
    <Instances count="1" /> 
    <ConfigurationSettings> 
    <Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="UseDevelopmentStorage=true" /> 
    </ConfigurationSettings> 
</Role> 

私WorkerRole.csがあります。正しいよう

public override void Run() { 
    Trace.WriteLine("Called from Run(), where does this trace go???", "Information"); 

    // ... SNIP ... 
} 
public override bool OnStart() { 
    // Set the maximum number of concurrent connections 
    ServicePointManager.DefaultConnectionLimit = 12; 

    DiagnosticMonitorConfiguration dmc = DiagnosticMonitor.GetDefaultInitialConfiguration(); 
    dmc.Logs.ScheduledTransferPeriod = TimeSpan.FromMinutes(1); 
    dmc.Logs.ScheduledTransferLogLevelFilter = LogLevel.Verbose; 
    DiagnosticMonitor.Start("DiagnosticsConnectionString", dmc); 

    Trace.WriteLine("This trace appears in WADLogsTable", "Information"); 

    return base.OnStart(); 
} 
+0

MonAgentHostがクラッシュしています。 Azureのバグのようです。参照してください:http://qa.social.msdn.microsoft.com/Forums/en-US/windowsazuretroubleshooting/thread/3d06d8f5-adf3-47bb-8a14-d57226273d3c – Seth

答えて

3

を - あなたは何も表示されませんなぜ私は疑問に思います。 Startが何とかあなたの設定の変更を無視しているのだろうか?ここに私が使用したトレースログを転送するコードがあります(私はこの作品が分かります):

private static void EnableDiagnostics(int transferTime) 
    { 
     string wadConnectionString = "Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString"; 
     CloudStorageAccount storageAccount = CloudStorageAccount.Parse(RoleEnvironment.GetConfigurationSettingValue(wadConnectionString)); 

     RoleInstanceDiagnosticManager roleInstanceDiagnosticManager = storageAccount.CreateRoleInstanceDiagnosticManager(RoleEnvironment.DeploymentId, RoleEnvironment.CurrentRoleInstance.Role.Name, RoleEnvironment.CurrentRoleInstance.Id); 
     DiagnosticMonitorConfiguration config = roleInstanceDiagnosticManager.GetCurrentConfiguration(); 

     if (config == null) 
     { 
      config = DiagnosticMonitor.GetDefaultInitialConfiguration(); 
     } 

     config.Logs.ScheduledTransferPeriod = TimeSpan.FromMinutes(transferTime); 
     config.Logs.ScheduledTransferLogLevelFilter = LogLevel.Undefined; 

     CrashDumps.EnableCollection(true); 

     roleInstanceDiagnosticManager.SetCurrentConfiguration(config); 
    } 
+0

ちょっとdunnry!私の "単純なstackoverflow"の例では、私は何らかの形でTracesを動作させましたが、OnStart()の内部のみでした。私は投稿する前に正確なコードをテストする必要がありました - 私の部分に悪いフォーム...それについては非常に気が!私は他の診断関連のコードをアクティブにしていないので、非常に奇妙です...しかし、何とか私の他のコードをスタブして、それを動作させました。私はまだOnStart()の外側にトレースを取得することはできません。 – Seth

+0

Aha!コードが動作することがあり、動作しないことがあります。Azureのバグのようです。コンソールログを見ると、MonAgentHostと呼ばれるものがクラッシュします(プロキシの設定がnullであると不平を言っています)。クラッシュしても、ログは通過せず、クラッシュする前にロギングが機能します。 – Seth

+0

回避策については、こちらを参照してください。http://qa.social.msdn.microsoft.com/Forums/en-US/windowsazuretroubleshooting/thread/3d06d8f5-adf3-47bb-8a14-d57226273d3c – Seth

関連する問題