3

我们使用 Windows Azure 诊断监视器跟踪侦听器将跟踪日志发送到 Azure 诊断。由于我们有大量详细日志,因此我们决定停止将这些日志发送到 Azure 诊断,以进行简单的调试。

但是,当我们设置ScheduledTransferLogLevelFilter属性时,Azure 诊断似乎会忽略它;所以所有Verbose的日志仍然发货。

我们使用的配置部分是:

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

虽然代码是:

var config = DiagnosticMonitor.GetDefaultInitialConfiguration();

config.Logs.ScheduledTransferLogLevelFilter = LogLevel.Information;
config.Logs.ScheduledTransferPeriod = TimeSpan.FromMinutes(1d);

DiagnosticMonitor.Start(CONNECTION_STRING, config);

有没有其他人遇到过这个问题?是否需要设置额外的一组配置值来阻止跟踪日志发送详细条目?

编辑:

Avkash Chauhan 让我走上了正轨;您需要显式保存配置;最终代码看起来像这样并且按预期运行。

public static void StartLogging()
{
    var cloudStorageAccount = 
        CloudStorageAccount.Parse(RoleEnvironment.GetConfigurationSettingValue(DEFAULT_CONNECTION_STRING));

    var roleInstanceDiagnosticManager =
        cloudStorageAccount.CreateRoleInstanceDiagnosticManager(
            RoleEnvironment.DeploymentId,
            RoleEnvironment.CurrentRoleInstance.Role.Name,
            RoleEnvironment.CurrentRoleInstance.Id);

    var config = roleInstanceDiagnosticManager.GetCurrentConfiguration();

    config.Logs.ScheduledTransferLogLevelFilter = LogLevel.Information;
    config.Logs.ScheduledTransferPeriod = TimeSpan.FromMinutes(1d);

    roleInstanceDiagnosticManager.SetCurrentConfiguration(config);

    // Start the diagnostic monitor with the modified configuration.
    DiagnosticMonitor.Start(DEFAULT_CONNECTION_STRING, config);
}
4

1 回答 1

3

我相信您没有正确保存配置设置,这可能会导致问题。在过去,我已经看到,如果您不将 SetCurrentConfiguration() 与配置对象一起使用,则不会保存设置,因此当诊断监视器运行时,您将看不到效果。尝试添加 SetCurrentConfiguration() 以检查是否是这种情况。

于 2012-07-02T18:30:50.887 回答