Windows Azure跟踪日志无法正常工作

时间:2011-05-13 16:50:22

标签: .net azure tracing azure-storage azure-diagnostics

我确信我错过了一些简单的东西,但我无法让简单的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。

没有看起来像我的跟踪信息。

非常感谢

3 个答案:

答案 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)

对,排序!

这篇文章解释了所有:http://social.msdn.microsoft.com/Forums/pl-PL/windowsazuredata/thread/d3f2f1d7-f11e-4840-80f7-f61dc11742fb

这是因为在Azure SDK 1.3中,webrole.cs文件中的侦听器与Web应用程序的其余部分不同,因为它在IIS中完全运行。如果我将跟踪项添加到Web应用程序本身,则表WADLogsTable将显示我的跟踪信息。

答案 2 :(得分:2)

我自己也有类似的问题,上面的帖子对我没有回答。我整理了一篇博客文章,概述了我为使Diagnostics使用SDK 1.6而采取的步骤

Windows Azure Diagnostics with SDK 1.6 for WebRoles