Мы используем 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>