Диагностика Azure не создает таблицу WADLogsTable

Я хотел добавить ведение журнала в существующую облачную службу Azure с помощью NLog и Azure Diagnostics. Я прошел все описанные здесь шаги: http://msdn.microsoft.com/en-us/library/azure/dn482131.aspx

Но, к сожалению, при тестировании облачного сервиса хранилище таблиц WADLogsTable не создается, и здесь информация не сохраняется. Ни на локальном хранилище, ни на лазурном.

diagnostics.wadcfg:

<?xml version="1.0" encoding="utf-8"?>
<DiagnosticMonitorConfiguration configurationChangePollInterval="PT1M" overallQuotaInMB="4096" xmlns="http://schemas.microsoft.com/ServiceHosting/2010/10/DiagnosticsConfiguration">
  <DiagnosticInfrastructureLogs />
  <Directories>
    <IISLogs container="wad-iis-logfiles" directoryQuotaInMB="1024" />
    <CrashDumps container="wad-crash-dumps" />
  </Directories>
  <Logs bufferQuotaInMB="1024" scheduledTransferPeriod="PT1M" scheduledTransferLogLevelFilter="Verbose" />
  <PerformanceCounters bufferQuotaInMB="512">
    <PerformanceCounterConfiguration counterSpecifier="\Memory\Available MBytes" sampleRate="PT3M" />
  </PerformanceCounters>
  <WindowsEventLog bufferQuotaInMB="1024" scheduledTransferPeriod="PT1M" scheduledTransferLogLevelFilter="Verbose">
    <DataSource name="Application!*" />
  </WindowsEventLog>
</DiagnosticMonitorConfiguration>

ServiceConfiguration.Local.csfg (то же самое в облаке, только с правильной учетной записью хранения таблицы)

<?xml version="1.0" encoding="utf-8"?>
<ServiceConfiguration serviceName="AAService" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="4" osVersion="*" schemaVersion="2014-01.2.3">
  <Role name="Web.Services.AAService">
    <Instances count="1" />
    <ConfigurationSettings>
      <Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="UseDevelopmentStorage=true" />
    </ConfigurationSettings>
  </Role>
</ServiceConfiguration>

ServiceDefinition.csdef

<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="AAService" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2014-01.2.3">
  <WebRole name="Web.Services.AAService" vmsize="ExtraSmall">
    <Sites>
      <Site name="Web">
        <Bindings>
          <Binding name="Endpoint1" endpointName="Endpoint1" />
        </Bindings>
      </Site>
    </Sites>
    <Endpoints>
      <InputEndpoint name="Endpoint1" protocol="http" port="80" />
    </Endpoints>
    <Imports>
      <Import moduleName="Diagnostics" />
    </Imports>
    <LocalResources>
      <LocalStorage name="Web.Services.AAService.svclog" sizeInMB="1000" cleanOnRoleRecycle="false" />
    </LocalResources>
  </WebRole>
</ServiceDefinition>

Точка входа WebRole

 public override bool OnStart()
        {
            // To enable the AzureLocalStorageTraceListner, uncomment relevent section in the web.config  
            DiagnosticMonitorConfiguration diagnosticConfig = DiagnosticMonitor.GetDefaultInitialConfiguration();
            diagnosticConfig.Directories.ScheduledTransferPeriod = TimeSpan.FromMinutes(1);
            diagnosticConfig.Directories.DataSources.Add(AzureLocalStorageTraceListener.GetLogDirectory());

            DiagnosticMonitor.Start("Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString", diagnosticConfig);

            // For information on handling configuration changes
            // see the MSDN topic at http://go.microsoft.com/fwlink/?LinkId=166357.

            return base.OnStart();
        }

Облачный сервис web.config также имеет:

<system.diagnostics>
    <trace>
      <listeners>
        <add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=2.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" name="AzureDiagnostics">
          <filter type="" />
        </add>
      </listeners>
    </trace>
  </system.diagnostics>

У кого-нибудь есть идеи, почему это не делает никаких журналов трассировки? Я вызывал Trace.WriteLine() во многих местах, где приложение точно проходит, но до сих пор не было WADLogsTable.

Спасибо за помощь

1 ответ

Решение

Избавьтесь от всего диагностического * кода в OnStart. <Import moduleName="Diagnostics" /> в вашем csdef автоматически запустится диагностический агент, а диагностический агент прочитает настройки из.wadcfg. Ваш код в OnStart не нужен и переопределяет настройки wadcfg из-за очередности загрузки конфигурации WAD.

Также обратите внимание, что если вы пытаетесь обновить существующую облачную службу, вам необходимо сначала удалить файл XML в хранилище больших двоичных объектов. Если файл уже существует в хранилище больших двоичных объектов, агент диагностики будет игнорировать параметры.wadcfg. Файл, который вы ищете, находится в wad-control-container и будет называться с идентификатором развертывания и именем роли.

Другие вопросы по тегам