Журнал трассировки Windows Azure не работает - PullRequest
11 голосов
/ 13 мая 2011

Я уверен, что упустил что-то простое, но не могу заставить простой 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 и три создаваемых двоичных объекта с именами vsdeploy, wad-control-container и was-iis-logfiles.

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

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

Ответы [ 3 ]

4 голосов
/ 13 мая 2011

У меня была такая же проблема.Я использовал решение здесь .Я полагаю, что фрагмент, который вам не хватает, - это место, где журналы запланированы для передачи (в данном случае, используя путь 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 для хранения этих файлов в вашем ServiceDefinition.csdef:

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

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

3 голосов
/ 13 мая 2011

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

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

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

2 голосов
/ 09 декабря 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...