在 Azure SDK for Java 中配置日志记录
本文概述如何在使用 Azure SDK for Java 的应用程序中启用日志记录。 适用于 Java 的 Azure 客户端库具有两个日志记录选项:
- 用于临时调试的内置记录框架。
- 支持使用 SLF4J 接口进行日志记录。
我们推荐你使用 SLF4J,因为它在 Java 生态系统中众所周知,且文档也很完善。 有关详细信息,请参阅 SLF4J 用户手册。
本文链接到介绍许多常用 Java 记录框架的其他文章。 这些文章提供了配置示例,并介绍了 Azure 客户端库如何使用记录框架。
无论使用哪种日志记录配置,在任何一种情况下都可以使用相同的日志输出,因为适用于 Java 的 Azure 客户端库中的所有日志记录输出都是通过 azure-core ClientLogger
抽象路由的。
本文的其余部分详细介绍了所有可用的日志记录选项的配置。
默认记录器(用于临时调试)
如前所述,所有 Azure 客户端库都使用 SLF4J 进行日志记录,但是适用于 Java 的 Azure 客户端库中内置了备用的默认记录器。 此默认记录器适用于以下情况:已部署应用程序且需要进行日志记录,但无法使用随附的 SLF4J 记录器重新部署应用程序。 若要启用此记录器,必须先确定不存在 SLF4J 记录器(因为它优先),然后设置 AZURE_LOG_LEVEL
环境变量。 下表显示了此环境变量允许的值:
日志级别 | 允许的环境变量值 |
---|---|
详细 | verbose , debug |
信息 | info , information , informational |
WARNING | warn , warning |
ERROR | err , error |
设置环境变量后,请重启应用程序以使环境变量生效。 此记录器将日志记录到控制台,不提供 SLF4J 实现的高级自定义功能,例如滚动更新和日志记录到文件。 若要再次关闭日志记录,只需删除该环境变量并重启应用程序。
SLF4J 日志记录
默认情况下,应使用 SLF4J 支持的记录框架配置日志记录。 首先,添加相关的 SLF4J 日志记录实现,作为项目的依赖项。 有关详细信息,请参阅 SLF4J 用户手册中的 Declaring project dependencies for logging(声明用于日志记录的项目依赖项)。 接下来,将记录器配置为在环境中根据需要工作,例如设置日志级别、配置哪些类执行和不记录等。 本文中的链接提供了一些示例,但有关详细信息,请参阅所选日志记录框架的文档。
日志格式
日志记录框架支持自定义日志消息格式和布局。 建议至少包括以下字段,以便对 Azure 客户端库进行故障排除:
- 具有毫秒精度的日期和时间
- 日志严重性
- 记录器名称
- 线程名
- 消息
有关示例,请参阅所用日志记录框架的文档。
结构化日志记录
除了记录前面提及的常见属性之外,Azure 客户端库还注释了具有额外上下文的日志消息(如果适用)。 例如,你可能会看到 JSON 格式的日志,其中包含 az.sdk.message
以其他根属性形式写入的上下文,如以下示例所示:
16:58:51.038 INFO c.a.c.c.i.C.getManifestProperties - {"az.sdk.message":"HTTP request","method":"GET","url":"<>","tryCount":"1","contentLength":0}
16:58:51.141 INFO c.a.c.c.i.C.getManifestProperties - {"az.sdk.message":"HTTP response","contentLength":"558","statusCode":200,"url":"<>","durationMs":102}
将日志发送到 Azure Monitor 时,可以使用 Kusto 查询语言 对其进行分析。 以下查询提供了一个示例:
traces
| where message startswith "{\"az.sdk.message"
| project timestamp, logger=customDimensions["LoggerName"], level=customDimensions["LoggingLevel"], thread=customDimensions["ThreadName"], azSdkContext=parse_json(message)
| evaluate bag_unpack(azSdkContext)
注意
Azure 客户端库日志适用于即席调试。 不建议依赖日志格式来警报或监视应用程序。 Azure 客户端库不能保证日志消息或上下文密钥的稳定性。 出于此类目的,我们建议使用分布式跟踪。 Application Insights Java 代理为请求和依赖项遥测提供稳定性保证。 有关详细信息,请参阅 Azure SDK for Java 中的配置跟踪。
后续步骤
现在,你已了解日志记录在 Azure SDK for Java 中的工作原理,请考虑查看以下文章。 这些文章提供了有关如何配置一些更常用 Java 日志记录框架以使用 SLF4J 和 Java 客户端库的指导:
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈