清除设置Azure诊断的步骤

时间:2014-07-01 23:59:20

标签: azure azure-diagnostics

我正在努力让诊断跟踪工作,但我对我必须遵循的必要步骤感到困惑。我将介绍我到目前为止所做的事情:

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();
}

}

所以,我有以下两个问题:

  1. 在我目前的解决方案中,我没有在WorkerRole的Start方法上编写任何代码来配置Diagnostic Monitor,但经过一些搜索后我发现很多人都这样做了。我在本地运行我的项目,我能够看到存储在Azure WADLogsTable中的数据。那么,是否必须将Diagnostic Monitor配置代码添加到我的Worker角色,或者我可以只使用diagnostics.wadcfg?
  2. 由于忽略了app.config文件中DiagnosticMonitorTraceListener的过滤器,如果我跳过使用从此处http://social.msdn.microsoft.com/forums/wpapps/en-us/92ed1175-d6b7-4173-a224-0f7eb3e99481/diagnosticmonitortracelistener-ignors-filter建议的DiagnosticMonitorTraceListener派生的自定义跟踪侦听器并在我的WorkerRole中使用Logs属性的ScheduledTransferLogLevelFilter,我将实现我想要的日志过滤器?或者也许在app.config和ScheduledTransferLogLevelFilter中过滤参考2种不同类型的过滤器?

1 个答案:

答案 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)。