我有一个我使用Azure部署的应用程序,我正在尝试使用普通的跟踪工作
我已经阅读了所有这些文章: https://stackoverflow.com/search?q=diagnosticmonitortracelistener
这是我的角色切入点:
public class WebRole :RoleEntryPoint {
public override bool OnStart() {
if (RoleEnvironment.IsAvailable) {
LocalResource localResource = RoleEnvironment.GetLocalResource("MyCustomLogs");
DirectoryConfiguration dirConfig = new DirectoryConfiguration();
dirConfig.Container = "diagnostics-mycustomlogs-container";
dirConfig.DirectoryQuotaInMB = localResource.MaximumSizeInMegabytes;
dirConfig.Path = localResource.RootPath;
DiagnosticMonitorConfiguration diagMonitorConfig = DiagnosticMonitor.GetDefaultInitialConfiguration();
diagMonitorConfig.Directories.ScheduledTransferPeriod = TimeSpan.FromMinutes(1.0);
diagMonitorConfig.Directories.DataSources.Add(dirConfig);
DiagnosticMonitor diagMonitor = DiagnosticMonitor.Start("Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString", diagMonitorConfig);
Trace.Listeners.Add(new Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener());
Trace.AutoFlush = true;
Trace.WriteLine("Role Starting");
}
return base.OnStart();
}
}
还将跟踪侦听器放在global.asax.cs:
中 if (RoleEnvironment.IsAvailable) {
Trace.Listeners.Add(new Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener());
Trace.AutoFlush = true;
}
我也尝试将其直接粘贴到web.config
<trace>
<add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener,
Microsoft.WindowsAzure.Diagnostics,
Version=1.8.0.0,
Culture=neutral,
PublicKeyToken=31bf3856ad364e35"
name="AzureDiagnostics">
<filter type="" />
</add>
此目录在我的Azure VM中创建
C:\Resources\Directory\d63aeab4198d458a9c0b1d0f818e4054.CorpQna.Web.MyCustomLogs
这是在我的ServiceDefinition.csdef
文件中:
<LocalResources>
<LocalStorage name="MyCustomLogs" cleanOnRoleRecycle="false" sizeInMB="10" />
</LocalResources>
当我在本地计算模拟器中添加TextWriterTraceListener
时,它可以工作:
<trace autoflush="true">
<listeners>
<add type="System.Diagnostics.TextWriterTraceListener" name="TextWriter"
initializeData="c:\trace.log" />
</listeners>
</trace>
但是,这不适用于Azure。 (我怀疑权限?)
我现在处于停滞状态。没有任何错误,但也没有日志。在我的Blob商店中没有创建Blob的记录。
答案 0 :(得分:3)
Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener
在.NET中,诊断跟踪将写入所有已注册的侦听器。 Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener
是一个跟踪侦听器,它基本上写入Azure存储中的WADLogsTable表。 Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener
不会写入本地文件,例如MyCustomLogs文件夹。 WAD DirectoryConfiguration
将上传文件,但这与.NET诊断跟踪没有任何关系,除非您还添加了TextWriterTraceListener
。
所以你的代码可能正常工作,但是你在寻找数据的错误位置。它不会出现在来自MyCustomLogs文件夹的blob中,而是出现在WADLogsTable表中。如果您希望跟踪也在MyCustomLogs文件夹中,那么您可以添加另一个TextWriterTraceListener类型的侦听器,指向MyCustomLogs文件夹中的文件。
答案 1 :(得分:0)
您是否检查过在服务配置中使用正确的存储帐户进行诊断。
默认情况下,它指向本地dev存储。您可能需要使用有效的存储帐户进行更改。
<Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="UseDevelopmentStorage=true" />