Сообщения Trace.WriteLine() сохраняются только в OnStart() для Azure WorkerRole

Я разрабатываю 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>

Моя рабочая роль.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();
}

person Seth    schedule 11.08.2011    source источник
comment
MonAgentHost дает сбой. Похоже на ошибку в Azure. см.: qa. social.msdn.microsoft.com/Forums/en-US/   -  person Seth    schedule 11.08.2011


Ответы (1)


Это выглядит правильно - интересно, почему вы ничего не видите. Интересно, Пуск как-то игнорирует ваши изменения конфигурации. Вот некоторый код, который я использовал для передачи журналов трассировки (я знаю, что это работает):

    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);
    }
person dunnry    schedule 11.08.2011
comment
эй даннри! при создании моего более простого примера для stackoverflow я каким-то образом заставил Traces работать, но только внутри OnStart(). Я должен был протестировать точный код перед публикацией - плохой тон с моей стороны ... очень стори об этом! Это очень странно, потому что у меня не было другого активного кода, связанного с диагностикой .... но каким-то образом заглушение моего другого кода заставило его работать. Я все еще не могу заставить трассировки вне OnStart() сохраняться. - person Seth; 11.08.2011
comment
Ага! Код иногда работает, а иногда нет, это похоже на ошибку в Azure. Глядя на журналы консоли, что-то под названием MonAgentHost падает (жалуется на нулевой параметр прокси!). После краха логи не проходят, до краха логирование работает. - person Seth; 11.08.2011
comment
Обходной путь описан здесь: qa.social.msdn.microsoft.com/Forums/en-US/ - person Seth; 11.08.2011