将 Trace 数据保存到存储在发布后无法在 Azure 中工作,但在开发环境中工作
Posted
技术标签:
【中文标题】将 Trace 数据保存到存储在发布后无法在 Azure 中工作,但在开发环境中工作【英文标题】:Saving Trace data to storage not working in Azure after publishing but working in Dev environment 【发布时间】:2014-12-08 21:10:26 【问题描述】:这是我在 WebRole OnStart 方法中使用的代码:
var config = DiagnosticMonitor.GetDefaultInitialConfiguration();
DiagnosticMonitorTraceListener tmp = new DiagnosticMonitorTraceListener();
System.Diagnostics.Trace.Listeners.Add(tmp);
//config.Logs.BufferQuotaInMB = 200;
config.Logs.ScheduledTransferPeriod = TimeSpan.FromSeconds(30.0);
DiagnosticMonitor.Start("Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString", config);
System.Diagnostics.Trace.Write("Test");
0这是我在 web.config 中的配置:
<trace>
<listeners>
<add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=2.3.0.0, Culture=neutral, PublicKeyToken=xxxx"
name="AzureDiagnostics">
<filter type="" />
</add>
</listeners>
</trace>
使用上面的代码,我可以在从本地环境执行的天蓝色存储表上编写跟踪语句。但是发布后trace语句并没有写在azure存储表上。
【问题讨论】:
【参考方案1】:这是因为您的 OnStart 方法在 WaIISHost.exe 中运行,并且您的 web.config 正在配置 w3wp.exe。这意味着您的 OnStart 代码没有定义跟踪侦听器。您可以搜索“DiagnosticMonitorTraceListener OnStart”并找到几个解决方案。一般来说,选项是:
将以下代码添加到您的 OnStart:
System.Diagnostics.Trace.Listeners.Add(new Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener());
将 <listeners>
元素添加到您的 app.config 以及您的 web.config。
【讨论】:
我已经在我的 OnStart() 和 web.config 中添加了侦听器,还添加了默认侦听器,它在发布到 azure 后也会出现问题,否则它可以正常工作。无论如何,我已经通过 log4net 实现了它,感谢您的回复。以上是关于将 Trace 数据保存到存储在发布后无法在 Azure 中工作,但在开发环境中工作的主要内容,如果未能解决你的问题,请参考以下文章