4

Azure WorkerRole() を開発しています。Compute Emulator コンソールにすべての Trace.WriteLine() メッセージが表示されますが、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();
}
4

1 に答える 1

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);
    }
于 2011-08-11T15:07:23.293 に答える