2

我有一个使用 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 的记录。

4

2 回答 2

3

道格,你在这里混淆了几个不同的概念:

  1. 诊断跟踪到文件
  2. Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener
  3. WAD 目录配置

在 .NET 中,诊断跟踪将写入所有已注册的侦听器。这Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener是一个跟踪侦听器,它基本上写入 Azure 存储中的 WADLogsTable 表。 Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener不会写入本地文件,例如您的 MyCustomLogs 文件夹。WADDirectoryConfiguration将上传文件,但这实际上与 .NET 诊断跟踪没有任何关系,除非您还添加了TextWriterTraceListener.

因此,您的代码原样可能工作正常,但您在错误的位置查找数据。它不会位于来自 MyCustomLogs 文件夹的 blob 中,而是位于 WADLogsTable 表中。如果您希望跟踪也位于 MyCustomLogs 文件夹中,则可以添加另一个 TextWriterTraceListener 类型的侦听器,指向 MyCustomLogs 文件夹中的文件。

于 2013-04-01T19:53:20.867 回答
0

您是否在服务配置中检查过是否使用正确的存储帐户进行诊断。

默认情况下,它指向本地开发存储。您可能必须使用有效的存储帐户进行更改。

 <Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="UseDevelopmentStorage=true" />
于 2013-04-01T08:07:32.123 回答