1

在试图弄清楚如何获取 Azure Web/Worker 角色的日志信息时,很多帖子建议我需要在两个地方设置我的配置设置。

1 配置.config文件

<system.diagnostics>
    <switches>
      <add name="logLevel" value="2" />
    </switches>
    <trace>
      <listeners>
        <add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=1.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" name="AzureDiagnostics">
          <filter type="" />
        </add>
      </listeners>
    </trace>
  </system.diagnostics>

2. 以编程方式(即 OnStart 方法)

DiagnosticMonitorConfiguration config = DiagnosticMonitor.GetDefaultInitialConfiguration();
config.Logs.ScheduledTransferPeriod = TimeSpan.FromMinutes(1);
config.Logs.ScheduledTransferLogLevelFilter = LogLevel.Warning;
DiagnosticMonitor.Start("Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString", config);

我不明白为什么每个人都建议我们必须定义两次日志过滤级别?

配置文件不应该足够吗?

4

2 回答 2

3

在第一个中,您要告诉您的应用程序(网站等)您想使用哪种跟踪侦听器。或者换句话说,当你写类似的东西时Trace.WriteLine("Something"),谁应该听那个消息。

在第二个位置,您要告诉在您的 VM 中运行的诊断监视器引擎如何处理发送给它的跟踪数据。

例如,在您的代码(OnStart 方法)中,您已配置:

config.Logs.ScheduledTransferLogLevelFilter = LogLevel.Warning;

这意味着诊断监视器引擎将只接受具有日志级别Warning或更高级别的跟踪消息,即仅考虑将这些消息传输到存储中。因此,即使您正在编写Trace.Information("Something")代码,诊断监视器也会忽略它。

您在代码中做的另一件事是告诉诊断引擎如何处理它收集的诊断数据。您配置的其他一些内容包括:

  • 缓冲区配额 - 在缓冲区翻转之前应该在缓冲区中保存多少数据。
  • 传输到存储 - 您希望将数据传输到 Windows Azure 存储的频率。
于 2013-06-02T04:19:46.100 回答
1

@Gaurav Mantri 的回答可能正是您所需要的。
然而,

配置文件不应该足够吗?

我不确定您所说的“足够”是什么意思。
Azure 云服务已经预定义了 DiagnosticsMontiro 的默认值,因此您不必添加这些代码行。

实际上,由于 Azure 配置中的几乎所有内容都可以从应用程序外部进行控制,因此最好不要更改代码中的配置。

以下内容来自MSDN

Windows Azure SDK 使您能够使用 XML 配置文件 (diagnostics.wadcfg) 配置诊断,而不是在角色的 OnStart 方法中以编程方式配置诊断。
与编写代码相比,这种方法有几个优点:

  1. 诊断在调用 OnStart 方法之前开始,因此可以捕获和记录启动任务中的错误。
  2. 在运行时对配置所做的任何更改将在重新启动后保留。
  3. 诊断配置更改不需要重建代码。
  4. 您可以在特定配置中自动启动诊断监视器,而无需额外的代码(这可能会导致阻止您的角色启动的异常)。
于 2013-06-02T15:20:34.297 回答