2013-04-01 4 views
2

У меня есть приложение, которое я развернутый с Azure, и я пытаюсь получить простую ваниль Трассировку рабочегоDiagnosticMonitorTraceListener не работает в лазури

Я прошел через все эти статьи: https://stackoverflow.com/search?q=diagnosticmonitortracelistener

Вот моя точка входа роль:

public class WebRole :RoleEntryPoint { 
    public override bool OnStart() { 
     if (RoleEnvironment.IsAvailable) { 
      LocalResource localResource = RoleEnvironment.GetLocalResource("MyCustomLogs"); 
      DirectoryConfiguration dirConfig = new DirectoryConfiguration(); 
      dirConfig.Container = "diagnostics-mycustomlogs-container"; 
      dirConfig.DirectoryQuotaInMB = localResource.MaximumSizeInMegabytes; 
      dirConfig.Path = localResource.RootPath; 
      DiagnosticMonitorConfiguration diagMonitorConfig = DiagnosticMonitor.GetDefaultInitialConfiguration(); 
      diagMonitorConfig.Directories.ScheduledTransferPeriod = TimeSpan.FromMinutes(1.0); 
      diagMonitorConfig.Directories.DataSources.Add(dirConfig); 
      DiagnosticMonitor diagMonitor = DiagnosticMonitor.Start("Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString", diagMonitorConfig); 

      Trace.Listeners.Add(new Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener()); 
      Trace.AutoFlush = true; 
      Trace.WriteLine("Role Starting"); 
     } 
     return base.OnStart(); 
    } 
} 

поставил также след слушателя в Global.asax.cs:

 if (RoleEnvironment.IsAvailable) { 
      Trace.Listeners.Add(new Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener()); 
      Trace.AutoFlush = true; 
     } 

Я также попытался просто вставить его непосредственно в web.config

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

Этот каталог получает созданный в моей Azure VM C:\Resources\Directory\d63aeab4198d458a9c0b1d0f818e4054.CorpQna.Web.MyCustomLogs

Это в моем ServiceDefinition.csdef файле:

<LocalResources> 
    <LocalStorage name="MyCustomLogs" cleanOnRoleRecycle="false" sizeInMB="10" /> 
</LocalResources> 

Когда я добавляю TextWriterTraceListener в свой локальный эмулятор вычислений, он работает:

<trace autoflush="true"> 
    <listeners> 
        <add type="System.Diagnostics.TextWriterTraceListener" name="TextWriter" 
          initializeData="c:\trace.log" /> 
    </listeners> 
</trace> 

Однако это не работает на Azure. (Я подозреваю, что разрешений?)

Я нахожусь в состоянии покоя на этом этапе. Нет ошибок в любом месте, но нет журналов. В моем магазине Blob нет записи о создании Blob.

+0

Он также не работает в эмуляторе. – Doug

+0

Вот учебник http: //blog.amtopm.be/2014/07/20/azure-diagnostic-how-to-troubleshoot-your-code/ – Wout

ответ

3

Даг, вы смешиваете несколько различных концепций здесь:

  1. Диагностика Трассировка в файл
  2. Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener
  3. WAD DirectoryConfiguration

В .NET, прослеживая диагностика будет писать всем зарегистрированным слушателям. Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener - это прослушиватель трассировки, который по существу записывает в таблицу WADLogsTable в Azure Storage. Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener не записывается в локальный файл, например, в папку MyCustomLogs. WAD DirectoryConfiguration будет загружать файлы, но это действительно не имеет ничего общего с трассировкой .NET-диагностики, если вы также не добавляете TextWriterTraceListener.

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

+0

У меня нет таблицы WADLogsTable в моем TableStorage (или BlobStorage). Нужно ли это создавать? – Doug

+0

Вам необходимо настроить WAD Logs в конфигурации диагностики, аналогично тому, как вы сейчас выполняете конфигурацию каталога. – kwill

+0

Как ни странно, это только начало работать через несколько часов. Понятия не имею почему. Ваш ответ правильный, поэтому я отметил его. – Doug

0

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

По умолчанию он указывает на локальное хранилище. вам может потребоваться изменить с помощью действительной учетной записи хранилища.

<Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="UseDevelopmentStorage=true" /> 
+0

Да, я использую правильную учетную запись хранилища. – Doug

Смежные вопросы