为 Azure 应用服务中的应用启用诊断日志记录
注意
从 2024 年 6 月 1 日开始,所有新创建的应用服务应用都可以选择生成唯一的默认主机名,命名约定为 <app-name>-<random-hash>.<region>.chinacloudsites.cn
。 现有应用名称将保持不变。
示例: myapp-ds27dh7271aah175.westus-01.chinacloudsites.cn
概述
Azure 提供内置诊断功能,可帮助调试应用服务应用。 在本文中,将了解如何启用诊断日志记录并将检测添加到应用程序,以及如何访问由 Azure 记录的信息。
本文使用 Azure 门户和 Azure CLI 来处理诊断日志。 有关通过 Visual Studio 使用诊断日志的信息,请参阅在 Visual Studio 中对 Azure 进行故障排除。
注意
除了本文中所述的日志记录功能以外,你还可以使用 Azure Monitor 的集成式日志记录功能。 你会在将日志发送到 Azure Monitor 部分中找到有关此功能的详细信息。
类型 | 平台 | 日志存储位置 | 说明 |
---|---|---|---|
应用程序日志记录 | Windows、Linux | 应用服务文件系统和/或 Azure 存储 Blob | 记录应用程序代码生成的消息。 这些消息可能由所选的 Web 框架生成,或者由应用程序代码使用你的语言的标准日志记录模式直接生成。 为每条消息分配以下类别之一:“严重”、“错误”、“警告”、“信息”、“调试”和“跟踪”。 启用应用程序日志记录时,可以通过设置严重性级别来选择日志记录的详细程度。 |
Web 服务器日志记录 | Windows | 应用服务文件系统或 Azure 存储 Blob | 采用 W3C 扩展日志文件格式的原始 HTTP 请求数据。 每条日志消息包含 HTTP 方法、资源 URI、客户端 IP、客户端端口、用户代理、响应代码等数据。 |
详细错误消息 | Windows | 应用服务文件系统 | 已发送到客户端浏览器的 .htm 错误页副本。 出于安全原因,不应将详细错误页发送到生产环境中的客户端,但每当出现 HTTP 代码为 400 或更大数字的应用程序错误时,应用服务都可以保存错误页。 该页可能包含有助于确定服务器返回错误代码的原因的信息。 |
失败请求跟踪 | Windows | 应用服务文件系统 | 有关失败请求的详细跟踪信息,包括对用于处理请求的 IIS 组件和每个组件所用的时间的跟踪。 如果要提高站点性能或隔离特定的 HTTP 错误,此信息非常有用。 对于每个失败的请求都会生成一个文件夹。 该文件夹包含 XML 日志文件,以及用于查看日志文件的 XSL 样式表。 |
部署日志记录 | Windows、Linux | 应用服务文件系统 | 有关何时将内容发布到应用的日志。 部署日志记录会自动发生,它没有可配置的设置。 它可以帮助确定部署失败的原因。 例如,如果使用自定义部署脚本,你可能会使用部署日志记录确定该脚本失败的原因。 |
在应用服务文件系统中存储日志时,日志受定价层的可用存储的约束(请参阅应用服务限制)。
启用应用程序日志记录 (Windows)
若要在 Azure 门户中为 Windows 应用启用应用程序日志记录,请导航到你的应用,然后选择“应用服务日志”。
对“应用程序日志记录(文件系统)”和/或“应用程序日志记录(Blob)”选择“打开”。
“文件系统”选项用于临时调试,在 12 小时后会自行关闭。 “Blob”选项用于长期日志记录,需要提供一个要将日志写入到的 Blob 存储容器。 “Blob”选项还会在日志消息中包含其他信息,例如日志消息的来源 VM 实例 ID (InstanceId
)、线程 ID (Tid
) 和更详细的时间戳 (EventTickCount
)。
注意
目前,只有 .NET 应用程序日志可以写入到 blob 存储。 Java、PHP、Node.js 和 Python 应用程序日志只能存储在应用服务文件系统上(无需修改代码即可将日志写入外部存储)。
此外,如果重新生成存储帐户的访问密钥,则必须重置相应的日志记录配置才能使用更新的访问密钥。 为此,请按以下步骤操作:
- 在“配置”选项卡上,将相应的日志记录功能设置为“关闭”。 保存设置。
- 再次启用将日志记录到存储帐户 Blob。 保存设置。
选择“级别”,即要记录的详细级别。 下表显示了每个级别包含的日志类别:
Level | 包含的类别 |
---|---|
已禁用 | 无 |
错误 | “错误”、“严重” |
警告 | “警告”、“错误”、“严重” |
信息 | “信息”、“警告”、“错误”、“严重” |
详细 | “跟踪”、“调试”、“信息”、“警告”、“错误”、“严重”(所有类别) |
完成后,选择“保存”。
注意
如果将日志写入 blob,则在删除该应用但保留 blob 中的日志时,不会再应用保留策略。
启用应用程序日志记录(Linux/容器)
若要在 Azure 门户中为 Linux 应用或自定义容器启用应用程序日志记录,请导航到你的应用,然后选择“应用服务日志”。
在“应用程序日志记录”中,选择“文件系统”。
在“配额(MB)”中,为应用程序日志指定磁盘配额。 在“保留期(天)”中,设置日志要保留的天数。
完成后,选择“保存”。
启用 Web 服务器日志记录
若要在 Azure 门户中为 Windows 应用启用 Web 服务器日志记录,请导航到你的应用,然后选择“应用服务日志”。
对于“Web 服务器日志记录”,请选择“存储”以将日志存储在 Blob 存储上,或选择“文件系统”以将日志存储在应用服务文件系统上。
在“保留期(天)”中,设置日志要保留的天数。
注意
如果重新生成存储帐户的访问密钥,则必须重置相应的日志记录配置才能使用更新的密钥。 为此,请按以下步骤操作:
- 在“配置”选项卡上,将相应的日志记录功能设置为“关闭”。 保存设置。
- 再次启用将日志记录到存储帐户 Blob。 保存设置。
完成后,选择“保存”。
注意
如果将日志写入 blob,则在删除该应用但保留 blob 中的日志时,不会再应用保留策略。
记录详细错误
若要在 Azure 门户中保存 Windows 应用的错误页或失败请求跟踪,请导航到你的应用,然后选择“应用服务日志”。
在“详细错误日志记录”或“失败请求跟踪”下,选择“打开”,然后选择“保存”。
这两种类型的日志都将存储在应用服务文件系统中。 最多可保留 50 个错误(文件或文件夹)。 当 HTML 文件的数目超出 50 时,最旧的错误文件会被自动删除。
默认情况下,“失败请求跟踪”功能会捕获 HTTP 状态代码在 400 到 600 之间的失败请求的日志。 若要指定自定义规则,可以替代 “web.config”文件中的 <traceFailedRequests>
节。
在代码中添加日志消息
在应用程序代码中,可以使用普通的日志记录功能将日志消息发送到应用程序日志。 例如:
ASP.NET 应用程序可使用 System.Diagnostics.Trace 类将信息记录到应用程序诊断日志。 例如:
System.Diagnostics.Trace.TraceError("If you're seeing this, something bad happened");
默认情况下,ASP.NET Core 使用 Microsoft.Extensions.Logging.AzureAppServices 日志记录提供程序。 有关详细信息,请参阅 Azure 中的 ASP.NET Core 日志记录。 有关 WebJobs SDK 日志记录的信息,请参阅 Azure WebJobs SDK 入门。
Python 应用程序可以使用 OpenCensus 包将日志发送到应用程序诊断日志。
流式传输日志
在实时流式传输日志之前,请启用所需的日志类型。 应用服务将会流式传输写入到存储于 /home/LogFiles 目录 (D:\home\LogFiles) 中以 .txt、.log 或 .htm 结尾的控制台输出或文件的所有信息。
注意
某些类型的日志记录缓冲区会对日志文件执行写入操作,这可能会导致事件以不正确的顺序出现在流中。 例如,用户访问页面时出现的应用程序日志项,可能显示在该页面请求所对应的 HTTP 日志项之前的流中。
在 Azure 门户中配置
若要在 Azure 门户中流式传输日志,请导航到你的应用并选择“日志流”。
在本地 shell 中
若要在本地 Shell 中实时流式传输日志,请使用以下命令:
重要
此命令可能无法与 Linux 应用服务计划中托管的 Web 应用配合使用。
az webapp log tail --name appname --resource-group myResourceGroup
若要筛选特定日志类型,例如 HTTP,请使用 --provider 参数。 例如:
az webapp log tail --name appname --resource-group myResourceGroup --provider http
访问日志文件
如果为日志类型配置 Azure 存储 Blob 选项,需要使用适用于 Azure 存储的客户端工具。 有关详细信息,请参阅 Azure 存储客户端工具。
对于存储在应用服务文件系统中的日志,访问文件的最简单方法是在浏览器中通过以下链接下载 ZIP 文件:
- Linux/自定义容器:
https://<app-name>.scm.chinacloudsites.cn/api/logs/docker/zip
- Windows 应用:
https://<app-name>.scm.chinacloudsites.cn/api/dump
对于 Linux/自定义容器,ZIP 文件包含 Docker 主机和 Docker 容器的控制台输出日志。 对于横向扩展的应用,ZIP 文件包含每个实例的一组日志。 在应用服务文件系统中,这些日志文件是“/home/LogFiles”目录的内容。 部署日志存储在 /site/deployments/ 中。
对于 Windows 应用,该 ZIP 文件包含应用服务文件系统中 D:\Home\LogFiles 目录的内容。 其结构如下:
日志类型 | 目录 | 说明 |
---|---|---|
应用程序日志 | /LogFiles/Application/ | 包含一个或多个文本文件。 日志消息的格式取决于所用的日志记录提供程序。 |
失败请求跟踪 | /LogFiles/W3SVC#########/ | 包含 XML 文件和一个 XSL 文件。 可以在浏览器中查看带格式的 XML 文件。 |
详细错误日志 | /LogFiles/DetailedErrors/ | 包含 HTM 错误文件。 可以在浏览器中查看 HTM 文件。 查看失败请求跟踪的另一种方法是在门户中导航到应用页。 在左侧菜单中选择“诊断和解决问题”,搜索“失败请求跟踪日志”,然后单击相应的图标来浏览和查看所需的跟踪。 |
Web 服务器日志 | /LogFiles/http/RawLogs/ | 包含使用 W3C 扩展日志文件格式格式化的文本文件。 你可以使用文本编辑器或诸如日志分析程序之类的实用工具来阅读这些文件。 应用服务不支持 s-computername 、s-ip 或 cs-version 字段。 |
部署日志 | /LogFiles/Git/ 和 /deployments/ | 包含内部部署进程生成的日志,以及 Git 部署的日志。 |
将日志发送到 Azure Monitor
通过 Azure Monitor 集成,你可以创建诊断设置,以将日志发送到存储帐户、事件中心和 Log Analytics。 当你添加诊断设置时,应用服务会将应用设置添加到你的应用中,从而触发应用重启。
支持的日志类型
有关支持的日志类型及其说明的列表,请参阅 Microsoft.Web 支持的资源日志。
网络注意事项
有关诊断设置限制,请参阅关于目标限制的官方诊断设置文档。