我正在努力让诊断跟踪工作,但我对我必须遵循的必要步骤感到困惑。我将介绍我到目前为止所做的事情:
在 app.config 中,我有以下内容:
<system.diagnostics>
<trace autoflush="true" />
<sources>
<source name="ProfileTrace" switchName="profileTraceSwitch" switchType="System.Diagnostics.SourceSwitch">
<listeners>
<add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=2.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" name="AzureDiagnostics">
<filter type="" initializeData="Warning" />
</add>
<add name="LogFileListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="..\..\..\skype.portal.profile.log" traceOutputOptions="ProcessId, ThreadId" />
</listeners>
</source>
</sources>
<switches>
<add name="profileTraceSwitch" value="Verbose"/>
</switches>
</system.diagnostics>
在 Service.Definition 中,我有以下内容:
<Imports>
<Import moduleName="Diagnostics" />
</Imports>
在 Service.Configuration 中,我有:
<ConfigurationSettings>
<Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="DefaultEndpointsProtocol=https;AccountName=<snip>;AccountKey=<snip>" />
我现在有以下困惑。正如您在app.config中看到的,我尝试为DiagnosticMonitorTraceListener添加一个过滤器以仅跟踪警告,但忽略了此过滤器。我发现这篇文章,建议使用派生自DiagnosticMonitorTraceListener http://social.msdn.microsoft.com/forums/wpapps/en-us/92ed1175-d6b7-4173-a224-0f7eb3e99481/diagnosticmonitortracelistener-ignors-filter的自定义跟踪侦听器
另一方面,在以下来自microsoft http://msdn.microsoft.com/en-us/library/ee758610.aspx的官方链接中,他们将过滤器类型留空:
<add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener,
Microsoft.WindowsAzure.Diagnostics,
Version=1.0.0.0,
Culture=neutral,
PublicKeyToken=31bf3856ad364e35"
name="AzureDiagnostics">
<filter type="" />
</add>
然后他们提到了我在哪里配置Logs属性http://msdn.microsoft.com/en-us/library/microsoft.windowsazure.diagnostics.diagnosticmonitorconfiguration.logs.aspx:
public override bool OnStart() {
......
// Filter the logs so that only error-level logs are transferred to persistent storage.
diagnosticConfiguration.Logs.ScheduledTransferLogLevelFilter = LogLevel.Error;
......
return base.OnStart();
}
}
所以,我有以下两个问题:
答案 0 :(得分:2)
我建议不要在代码中设置Azure诊断配置。相反,我建议使用diagnostic.wadcfg文件方法。你可以在这里找到一些信息 - http://msdn.microsoft.com/en-us/library/hh411551.aspx。 Visual Studio也将帮助生成此文件。
不必在您的角色的OnStart()方法中设置任何Azure诊断配置。
设置ScheduledTransferLogLevelFilter应该足够了。此外,如果需要,还可以在运行时轻松更改过滤级别(通过API调用,Visual Studio或第三方工具,如Cerebrata Azure Management Studio)。