Nar*_*man 6 asp.net enterprise-library azure azure-diagnostics
我们使用DiagnosticMonitorTraceListener作为通用跟踪侦听器(主要用于ASP.NET运行状况监视)以及用于异常处理的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;
}
}
Run Code Online (Sandbox Code Playgroud)
这适用于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>
Run Code Online (Sandbox Code Playgroud)
如果没有解决,调用ExceptionPolicy.HandleException将生成:
未在托管服务或Development Fabric中运行.
要根据应用程序的运行位置有条件地删除它,我们可以使用EL5的流畅配置API,但必须重写我们的配置(它是全部或全部).
我们也可以使用web.config转换,除了已经有3种不同的解决方案配置(例如,dev,staging,production)之外,我们必须引入第4个来区分dev-standalone和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>
Run Code Online (Sandbox Code Playgroud)
您可以创建一个 DiagnosticMonitorTraceListener,然后将其添加到您的类别的 TraceSources 集合中。
从 EntLib 配置中删除 Azure 诊断跟踪侦听器:
<categorySources>
<add switchValue="All" name="General">
<listeners>
<add name="Event Log Listener" />
</listeners>
</add>
</categorySources>
Run Code Online (Sandbox Code Playgroud)
然后使用下面的代码在运行时添加它:
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());
}
}
Run Code Online (Sandbox Code Playgroud)