我确信我错过了一些简单的东西,但我无法让简单的Trace.WriteLine在Azure上工作。
我采取的步骤:
Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString已设置为我们的Azure存储帐户
将模块诊断导入服务定义文件。
Web config
:
<system.diagnostics>
<switches>
<add name="logLevel" value="4" />
</switches>
<trace autoflush="false" indentsize="4">
<listeners>
<add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
name="AzureDiagnostics">
</add>
</listeners>
</trace>
</system.diagnostics>
WebRole.cs
public class WebRole : RoleEntryPoint
{
public override bool OnStart()
{
String wadConnectionString = "Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString";
CloudStorageAccount cloudStorageAccount = CloudStorageAccount.Parse(RoleEnvironment.GetConfigurationSettingValue(wadConnectionString));
RoleInstanceDiagnosticManager roleInstanceDiagnosticManager =
cloudStorageAccount.CreateRoleInstanceDiagnosticManager(
RoleEnvironment.DeploymentId,
RoleEnvironment.CurrentRoleInstance.Role.Name,
RoleEnvironment.CurrentRoleInstance.Id);
DiagnosticMonitorConfiguration diagnosticMonitorConfiguration =
roleInstanceDiagnosticManager.GetCurrentConfiguration();
diagnosticMonitorConfiguration.Directories.ScheduledTransferPeriod =
TimeSpan.FromMinutes(5d);
diagnosticMonitorConfiguration.Logs.ScheduledTransferPeriod =
TimeSpan.FromMinutes(1d);
diagnosticMonitorConfiguration.Logs.ScheduledTransferLogLevelFilter = LogLevel.Verbose;
roleInstanceDiagnosticManager.SetCurrentConfiguration
(diagnosticMonitorConfiguration);
Trace.WriteLine("This is the message");
Debug.Write("This is the debug message");
System.Diagnostics.Trace.TraceError("message2");
System.Diagnostics.Trace.TraceWarning("message warning");
System.Diagnostics.Trace.TraceInformation("message warning");
Trace.Flush();
return base.OnStart();
}
}
解决方案编译为发布。
当我查看存储帐户中的对象时,我可以看到一个名为WADDirectoriesTable的表,并创建了三个名为vsdeploy,wad-control-container和was-iis-logfiles的blob。
没有看起来像我的跟踪信息。
非常感谢
答案 0 :(得分:4)
我有同样的问题。我正在使用解决方案here。我相信你缺少的部分是日志scheduled to be transferred的位置(在这种情况下,使用LocalResource路径):
public override bool OnStart()
{
Trace.WriteLine("Entering OnStart...");
var traceResource = RoleEnvironment.GetLocalResource("TraceFiles");
var config = DiagnosticMonitor.GetDefaultInitialConfiguration();
// *** this part specifies where transfers should be stored ***
config.Directories.DataSources.Add(
new DirectoryConfiguration
{
Path = traceResource.RootPath,
Container = "traces",
DirectoryQuotaInMB = 100
});
config.Directories.ScheduledTransferPeriod = TimeSpan.FromMinutes(10);
DiagnosticMonitor.Start("DiagnosticsConnectionString", config);
return base.OnStart();
}
为了实现此目的,您必须创建一个LocalStorage节点,将这些文件存储在ServiceDefinition.csdef
中:
<LocalStorage name="TraceFiles" sizeInMB="100" cleanOnRoleRecycle="true" />
并且您需要有办法将这些文件传输到可以访问它们的位置,因为它们不在存储帐户中,而是在VM本身的本地资源文件夹中。我通过允许我下载本地资源文件的网页来实现这一目标。
答案 1 :(得分:3)
对,排序!
这是因为在Azure SDK 1.3中,webrole.cs文件中的侦听器与Web应用程序的其余部分不同,因为它在IIS中完全运行。如果我将跟踪项添加到Web应用程序本身,则表WADLogsTable将显示我的跟踪信息。
答案 2 :(得分:2)
我自己也有类似的问题,上面的帖子对我没有回答。我整理了一篇博客文章,概述了我为使Diagnostics使用SDK 1.6而采取的步骤