我们将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 健康监控和 System.Diagnosics 的一般用途,但不适用于具有以下硬编码配置的企业库:
<categorySources>
<add switchValue="All" name="General">
<listeners>
<add name="Event Log Listener" />
<add name="Azure Diagnostics Trace Listener" />
</listeners>
</add>
</categorySources>
如果未解决,对 ExceptionPolicy.HandleException 的调用将生成:
不在托管服务或 Development Fabric 中运行。
要根据应用程序运行的位置有条件地删除它,我们可以使用 EL5 的流畅配置 API,但必须重写我们的配置(全有或全无)。
我们还可以使用 web.config 转换,除了已经有 3 种不同的解决方案配置(例如,开发、登台、生产)之外,我们必须引入第 4 种来区分开发独立与开发天蓝色。
最后一个选项是创建一个自定义侦听器,它将所有消息路由到 ** **(如果在 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>