启用并配置应用服务应用程序日志记录

已完成

在本单元中,我们将了解应用日志记录如何帮助你的 Web 应用,并向你展示如何启用应用日志。

应用日志是什么?

Azure 为应用日志记录提供内置诊断功能。 应用日志是应用代码中运行时跟踪语句的输出。 例如,你可能希望通过添加跟踪来检查代码中的一些逻辑,以显示何时处理特定的函数。 或者,你可能只想在发生特定级别的错误时看到记录的消息。 应用日志记录主要用于预生产中的应用以及棘手的问题,因为过多的日志可能会影响性能并快速消耗存储。 出于此原因,12 小时后会自动禁用对文件系统的日志记录。

应用日志记录具有规模限制,主要是因为“文件”用于保存记录的输出。 如果有多个应用实例,并且所有实例共享相同存储,则来自不同实例的消息可能会交错,从而使故障排除变得困难。 如果每个实例都有自己的日志文件,则会存在多个日志,这同样会导致难以对特定于实例的问题进行故障排除。

Azure 应用服务提供的可用日志记录类型取决于应用的代码框架,以及应用是在 Windows 还是 Linux 应用主机上运行。

ASP.NET

ASP.NET 应用仅在 Windows 应用服务上运行。 若要将信息记录到应用诊断日志,请使用 System.Diagnostics.Trace 类。 可使用四种与 Azure 门户中显示的 errorwarninginformationverbose 日志记录级别相关联的跟踪级别:

  • Trace.TraceError("Message"); // 写入错误消息
  • Trace.TraceWarning("Message"); // 写入警告消息
  • Trace.TraceInformation("Message"); // 写入信息消息
  • Trace.WriteLine("Message"); // 写入详细消息

ASP.NET Core 应用

ASP.NET Core 应用可以在 Windows 或 Linux 上运行。 若要将信息记录到 Azure 应用日志,请使用“记录器工厂”类,然后使用六个日志级别之一:

  • logger.LogCritical("Message"); //在日志级别 5 写入关键消息
  • logger.LogError("Message"); //在日志级别 4 写入错误消息
  • logger.LogWarning("Message"); //在日志级别 3 写入警告消息
  • logger.LogInformation("Message"); //在日志级别 2 写入信息消息
  • logger.LogDebug("Message"); // 在日志级别 1 写入调试消息
  • logger.LogTrace("Message"); //在日志级别 0 写入详细跟踪消息

对于 Windows 上的 ASP.NET Core 应用,这些消息按以下方式与 Azure 门户中的筛选器相关联:

  • 级别 4 和 5 是错误消息。
  • 级别 3 是警告消息。
  • 级别 2 是信息消息。
  • 级别 0 和 1 是详细消息。

对于 Linux 上的 ASP.NET Core 应用,仅记录错误消息(级别 4 和 5)。

Node.js 应用

对于基于脚本的 Web 应用,例如 Windows 或 Linux 上的 Node.js 应用,需使用 console() 方法启用应用日志记录:

  • console.error("Message"); // 将消息写入 STDERR。
  • console.log("Message"); // 将消息写入 STDOUT。

这两种类型的消息会写入 Azure 应用服务错误级别日志。

Windows 和 Linux 主机之间的日志记录差异

若要将消息路由到日志文件,Azure Web 应用使用 Internet Information Services (IIS) Web 服务器。 由于基于 Windows 的 Web 应用是完善的 Azure 服务,并且 ASP.NET 应用的消息传递与基本 IIS 服务紧密集成,因此 Windows 应用可从丰富的日志记录基础结构中受益。 对于其他应用,即使运行在 Windows 应用服务上,日志记录选项也会受到开发平台的限制。

用于应用容器的 Docker 映像决定了基于 Linux 的脚本应用(如 Node)可用的日志记录功能。 基本日志记录(如使用到 STDERR 或 STDOUT 的重定向)使用 Docker 日志。 更丰富的日志记录功能取决于基础映像,以及它是否运行 PHP、Perl、Ruby 等。 若要下载 IIS 为 Windows 应用提供的等效 Web 应用程序日志记录,可能需要使用 SSH 连接到容器。

下表总结了对常见应用环境和主机的日志记录支持。

应用环境 主机 日志级别 保存位置
ASP.NET Windows 错误、警告、信息、详细 文件系统、Blob 存储
ASP.NET Core Windows 错误、警告、信息、详细 文件系统、Blob 存储
ASP.NET Core Linux 错误 文件系统
Node.js Windows 错误 (STDERR)、信息 (STDOUT)、警告、详细 文件系统、Blob 存储
Node.js Linux 错误 文件系统
Java Linux 错误 文件系统

应用诊断的替代方案

Azure Application Insights 是网站扩展,可提供更多的性能监视功能,如详细使用情况和性能数据。 Application Insights 专为生产应用部署而设计,是一种可能有用的开发工具。 它适用于一系列应用开发环境,无论应用是 ASP.NET 还是 Node,都可提供相同的、丰富的遥测和性能数据集。 但是,要想使用 Application Insights,则必须使用 App Insights SDK 在应用中包含特定代码。 Application Insights 也是一项计费服务。 因此,根据应用部署规模和收集的数据,可能需要计划支付常规成本。

还可以查看应用的“指标”,这可以帮助你分析应用的运营情况。 这些计数器在生产和开发中非常有用。 可以查看 CPU、内存、网络和文件系统使用情况,并设置在计数器达到特定阈值时发出警报。 应用服务计划层涵盖了指标的费用。

使用 Azure 门户启用日志记录

在门户中,可在 Web 应用的“诊断日志”窗格中管理应用日志记录。

Azure 门户中的诊断日志窗格的屏幕截图。

若要启用到 Web 应用文件系统的应用日志记录,请将“应用程序日志记录(文件系统)”设置为“开”,然后将“级别”设置为“错误”、“警告”、“信息”或“详细”。 文件系统的日志记录将在 12 小时后自动重置为“”。

要启用 Blob 存储容器的应用日志记录,请将“应用程序日志记录 (Blob)”设置为“”,然后选择存储帐户和容器。 必须在同一 Azure 区域中创建存储帐户和 Web 应用。 然后,将“级别”设置为“错误”、“警告”、“信息”或“详细”。

备注

保存到 Blob 存储不适用于 Linux 应用日志。

向 Blob 存储中进行日志记录时,还必须设置“保留期”。 与文件系统日志不同,默认情况下永远不会删除 Blob 日志。 保留期选项意味着将会删除任何早于指定天数的日志。

在 Azure 门户中配置应用程序日志的屏幕截图,其中突出显示了“保存”。

配置日志之后,选择“保存”。

使用 Azure CLI 启用日志记录

若要启用到文件系统的应用日志记录,请运行以下命令。

az webapp log config --application-logging filesystem --level verbose --name <app-name> --resource-group <resource-group-name>

例如,若要将 contosofashions123 应用的日志记录到文件系统,同时捕获所有消息,请运行此命令。

az webapp log config --application-logging filesystem --level verbose --name contosofashions123 --resource-group contosofashionsRG

目前无法使用 Azure CLI 命令禁用应用程序日志记录。 但以下命令会将文件系统日志记录重置为仅限错误级别。

az webapp log config --application-logging off --name <app-name> --resource-group <resource-group-name>

若要查看应用的当前日志记录状态,请使用此命令。

az webapp log show --name <app-name> --resource-group <resource-group-name>

知识检查

1.

哪些类型的 Web 应用可以将日志保存到 Azure Blob 存储?

2.

为什么文件系统日志记录会在 12 小时后自动关闭?