【问题标题】:RoleEntryPoint trace calls are not being logged using the 2.0 Azure SDK for Cloud Services未使用 2.0 Azure SDK for Cloud Services 记录 RoleEntryPoint 跟踪调用
【发布时间】:2013-04-26 10:46:08
【问题描述】:

Scottgu 刚刚发布了 2.0 SDK: http://weblogs.asp.net/scottgu/archive/2013/04/30/announcing-the-release-of-windows-azure-sdk-2-0-for-net.aspx

我尝试创建一个新的 MVC4 站点。将其添加到云项目中,并按预期包含以下诊断设置。

  <system.diagnostics>
    <trace>
      <listeners>
        <add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
          name="AzureDiagnostics">
          <filter type="" />
        </add>
      </listeners>
    </trace>
  </system.diagnostics>

根据: https://www.windowsazure.com/en-us/develop/net/common-tasks/diagnostics/ Windows Azure 日志默认开启,

记录从您的代码发送到跟踪侦听器的跟踪消息(跟踪 侦听器必须添加到 web.config 或 app.config 文件)。日志数据 将在 scheduledTransferPeriod 传输间隔传输到 存储表WADLogsTable。

诊断.wadcfg:

<?xml version="1.0" encoding="utf-8"?>
<DiagnosticMonitorConfiguration configurationChangePollInterval="PT1M" overallQuotaInMB="4096" xmlns="http://schemas.microsoft.com/ServiceHosting/2010/10/DiagnosticsConfiguration">
  <DiagnosticInfrastructureLogs />
  <Directories>
    <IISLogs container="wad-iis-logfiles" />
    <CrashDumps container="wad-crash-dumps" />
  </Directories>
  <Logs bufferQuotaInMB="1024" scheduledTransferPeriod="PT1M" scheduledTransferLogLevelFilter="Verbose" />
  <WindowsEventLog bufferQuotaInMB="1024" scheduledTransferPeriod="PT1M" scheduledTransferLogLevelFilter="Error">
    <DataSource name="Application!*" />
  </WindowsEventLog>
</DiagnosticMonitorConfiguration>

我在 global.cs 和 webrole.cs 启动方法中都放置了一个 Trace.TraceError,但我只从 global.cs 中获取一个。

我是否遗漏了什么,或者它不应该也适用于 WebRole?

【问题讨论】:

    标签: azure diagnostics


    【解决方案1】:

    WebRole.cs 与您的应用程序本身在不同的进程中运行,您的web.config 不会影响它。

    尝试在代码中手动设置Trace Listeners

    Trace.Listeners.Add(new Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener());
    

    或使用here的解决方案:

    从 RoleEntryPoint 和您的网站读取配置文件: 即使在 Windows Azure 中存储配置的首选方式 applications 在 ServiceConfiguration.cscfg 文件中,有 在很多情况下,您可能想要使用普通的 .NET 配置文件 - 特别是在配置 .NET 系统组件或可重用时 构架。尤其是当您使用 Windows Azure 诊断程序时 您需要在 .NET 中配置 DiagnosticMonitorTraceListener 配置文件。

    创建 Web 角色项目时,Visual Studio 会创建一个 .NET 配置的 web.config 文件。当您的网络 应用程序可以访问此信息,您的 RoleEntryPoint 代码 不能,因为它没有作为您网站的一部分运行。作为 前面提到,它运行在一个名为 WaIISHost.exe 的进程下,所以它 期望其配置位于名为 WaIISHost.exe.config 的文件中。 因此,如果您在 Web 项目中创建具有此名称的文件 并将“复制到输出目录”属性设置为“始终复制” 您会发现 RoleEntryPoint 可以愉快地阅读此内容。这是一 在我能想到的仅有的情况下,您将拥有两个 .NET 同一个项目中的配置文件!

    【讨论】:

    • 谢谢。我曾希望它以某种方式包含在 SDK2.0 的此更新中。如您在此处显示的那样,自己添加侦听器。但我无法在服务器资源管理器的新“查看诊断数据”条目中看到 Visual Studio 中的信息。它过滤日志以仅显示来自应用程序而不是 webrole 的内容。 (我可以在表格存储中找到该条目,但需要一个 3party 工具以友好的方式查看)。
    • Nvm,它似乎在 Visual Studio 中也可以用于查看来自 webrole 的跟踪。
    • 这个点赞实际上是一百万点赞。 Trace.Listeners.Add() 完成这项工作。这是对在这个问题上把我的头撞到墙上一天之后发生的事情的最简单的解释;谢谢!
    猜你喜欢
    • 1970-01-01
    • 2011-04-06
    • 2020-11-25
    • 2019-06-05
    • 1970-01-01
    • 2016-11-30
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多