Запуск с помощью DiagnosticMonitorTraceListener за пределами эмулятора вычислений Azure - PullRequest
6 голосов
/ 20 июля 2011

Мы используем DiagnosticMonitorTraceListener в качестве общего прослушивателя трассировки (главным образом для ASP.NET Health Monitoring ), а также прослушивателя Enterprise Library 5 для обработки исключений.Это хорошо работает при работе в Azure, но важно, чтобы мы могли запускать веб-сайт вне Azure с минимальными изменениями.

Один из вариантов - зарегистрировать его динамически следующим образом:

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

Это работает для ASP.NET Health Monitoring и общего использования System.Diagnosics, но не для Enterprise Library, где у нас есть следующая жестко заданная конфигурация:

  <categorySources>
    <add switchValue="All" name="General">
      <listeners>
        <add name="Event Log Listener" />
        <add name="Azure Diagnostics Trace Listener" />
      </listeners>
    </add>
  </categorySources>

Оставлено без адреса, звонкиExceptionPolicy.HandleException сгенерирует:

Не работает в размещенной службе или в среде разработки.

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

Мы также могли бы использовать преобразования web.config за исключением того, что в дополнение к уже имеющимся 3 различным конфигурациям решения (например, dev, постановка, производство), мы должны были бы ввести 4-й, чтобы различать dev-standalone vs. dev-azure.

Последний вариант - просто создать пользовательский прослушиватель, который либо перенаправит все сообщения на ** ** (если работает на Azure), либо ничего не сделает.

Любые другие предложения?

К сведению, мониторинг работоспособности ASP.NET настроен следующим образом:

<healthMonitoring enabled="true">
  <providers>
    <add name="TraceWebProvider" type="System.Web.Management.TraceWebEventProvider" />
  </providers>
  <rules>
    <add name="Application Events"
         eventName="Application Lifetime Events"
         provider="TraceWebProvider"
         profile="Default"
         minInstances="1"
         maxLimit="Infinite"
         minInterval="00:01:00" />
  </rules>
</healthMonitoring>

1 Ответ

2 голосов
/ 06 января 2012

Вы можете создать DiagnosticMonitorTraceListener и затем добавить его в коллекцию TraceSources для вашей категории.

Удалить Azure Diagnostics Trace Listener из конфигурации EntLib:

  <categorySources>
    <add switchValue="All" name="General">
      <listeners>
        <add name="Event Log Listener" />
      </listeners>
    </add>
  </categorySources>

И затем использовать кодниже, чтобы добавить его во время выполнения:

protected void Application_Start()
{
    if (Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.IsAvailable)
    {
        LogSource logSource;
        Logger.Writer.TraceSources.TryGetValue("General", out logSource);
        logSource.Listeners.Add(new Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener());
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...