Журнал отслеживания Windows Azure не работает

Я уверен, что пропустил что-то простое, но я не могу получить простой Trace.WriteLine для работы над Azure.

Шаги, которые я сделал:

Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString настроен на нашу учетную запись Azure

Диагностика модуля импорта в файл определения службы.

Web config:

  <system.diagnostics>
    <switches>
      <add name="logLevel" value="4" />
    </switches>
    <trace autoflush="false" indentsize="4">
      <listeners>
        <add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
          name="AzureDiagnostics">
        </add>
      </listeners>
    </trace>

  </system.diagnostics>

WebRole.cs

public class WebRole : RoleEntryPoint
{
    public override bool OnStart()
    {


        String wadConnectionString = "Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString";

        CloudStorageAccount cloudStorageAccount = CloudStorageAccount.Parse(RoleEnvironment.GetConfigurationSettingValue(wadConnectionString));

        RoleInstanceDiagnosticManager roleInstanceDiagnosticManager =
                cloudStorageAccount.CreateRoleInstanceDiagnosticManager(
                RoleEnvironment.DeploymentId,
                RoleEnvironment.CurrentRoleInstance.Role.Name,
                RoleEnvironment.CurrentRoleInstance.Id);

        DiagnosticMonitorConfiguration diagnosticMonitorConfiguration =
            roleInstanceDiagnosticManager.GetCurrentConfiguration();

        diagnosticMonitorConfiguration.Directories.ScheduledTransferPeriod =
               TimeSpan.FromMinutes(5d);

        diagnosticMonitorConfiguration.Logs.ScheduledTransferPeriod =
               TimeSpan.FromMinutes(1d);

        diagnosticMonitorConfiguration.Logs.ScheduledTransferLogLevelFilter = LogLevel.Verbose;

        roleInstanceDiagnosticManager.SetCurrentConfiguration
              (diagnosticMonitorConfiguration);

        Trace.WriteLine("This is the message");
        Debug.Write("This is the debug message");
        System.Diagnostics.Trace.TraceError("message2");
        System.Diagnostics.Trace.TraceWarning("message warning");
        System.Diagnostics.Trace.TraceInformation("message warning");
        Trace.Flush();
        return base.OnStart();

    }
}

Решение компилируется как выпуск.

Когда я просматриваю объекты в учетной записи хранилища, я вижу таблицу под названием WADDirectoriesTable и три создаваемые blobs, называемые vsdeploy, wad-control-container и was-iis-logfiles.

Ничего похожего на информацию о трассировке.

Большое спасибо

Ответ 1

Правильно, отсортировано!

В этом сообщении объясняются все: http://social.msdn.microsoft.com/Forums/pl-PL/windowsazuredata/thread/d3f2f1d7-f11e-4840-80f7-f61dc11742fb

Это потому, что в Azure SDK 1.3 слушатели различаются в файле webrole.cs из остальной части веб-приложения из-за того, что он полностью работает в IIS. Если я добавлю элементы трассировки непосредственно в веб-приложение, появится таблица WADLogsTable с информацией о трассировке.

Ответ 2

У меня была такая же проблема. Я использовал решение здесь. Я считаю, что фрагмент, который вам не хватает, - это место, где журналы планируются к передаче (в этом случае, используя путь LocalResource):

public override bool OnStart()
{
    Trace.WriteLine("Entering OnStart...");

    var traceResource = RoleEnvironment.GetLocalResource("TraceFiles");
    var config = DiagnosticMonitor.GetDefaultInitialConfiguration();

    // *** this part specifies where transfers should be stored ***
    config.Directories.DataSources.Add(
        new DirectoryConfiguration
        {
            Path = traceResource.RootPath,
            Container = "traces",
            DirectoryQuotaInMB = 100
        });
    config.Directories.ScheduledTransferPeriod = TimeSpan.FromMinutes(10);

    DiagnosticMonitor.Start("DiagnosticsConnectionString", config);

    return base.OnStart();
}  

Чтобы это сработало, вам нужно создать LocalStorage node для хранения этих файлов в ServiceDefinition.csdef:

<LocalStorage name="TraceFiles" sizeInMB="100" cleanOnRoleRecycle="true" />

и вам нужно иметь способ передать эти файлы в какое-то место, где вы можете добраться до них, потому что они недоступны в учетной записи хранилища, а в локальной папке ресурсов на самой виртуальной машине. Я выполняю это с помощью веб-страницы, которая позволяет мне загружать файлы локальных ресурсов.

Ответ 3

У меня были схожие проблемы, и эти сообщения не отвечали за меня. Я собрал сообщение в блоге, в котором излагаются шаги, которые я предпринял для получения Диагностики, работающей с SDK 1.6.

Диагностика Windows Azure с SDK 1.6 для WebRoles