跟踪和日志记录
Overview
在本指南中,您可以了解如何使用 Rust 驱动程序为应用程序配置跟踪和日志记录。 跟踪和日志记录是观察应用程序的两个框架。 日志记录允许您查看驱动程序活动的基于事件的离散日志,而跟踪则提供连续视图。
在 Rust 驱动程序中,跟踪和日志记录功能没有太大区别。 但是,启用跟踪后,驱动程序会以更加结构化的格式发出消息,这可以让应用程序更方便地以编程方式使用事件消息。
跟踪器和记录器按照您可以指定的严重性或详细程度记录消息。 通过在应用程序中启用这些组件之一,您可以接收不同详细程度的应用程序活动信息。
提示
要学习;了解有关日志记录严重性级别的更多信息,请参阅有关消息日志记录的 系统日志标准的 维基百科条目。
启用跟踪和日志记录
驾驶员实现 跟踪 箱,启用驾驶员能够为驾驶员事件发出消息。
重要
追踪箱不稳定
由于 tracing
crate 没有 1.0 版本,因此您可以认为该功能不稳定。
要启用跟踪和/或日志记录,您必须将tracing
依赖项和tracing-unstable
功能标志添加到Cargo.toml
文件中的mongodb
依赖项:
[dependencies] tracing = "0.1.37" [dependencies.mongodb] version = "3.1.0" features = ["tracing-unstable"]
下表描述了可以针对其发出事件的组件及其相应的目标:
组件 | 目标 | 说明 |
---|---|---|
命令 | mongodb::command | 事件描述发送到数据库的命令以及这些命令是成功还是失败。 |
服务器选择 | mongodb::server_selection | 事件描述了驱动程序在 MongoDB 部署中选择服务器的过程。 |
连接 | mongodb::connection | 事件描述了驱动程序连接池的行为及其包含的连接。 |
要指定日志记录组件和严重性级别,可以在编译和运行应用程序时设置RUST_LOG
环境变量。 通过将RUST_LOG
的值设置为上表中提供的目标之一并包含严重性级别来指定日志记录组件。
以下代码显示了用于执行在debug
级别记录连接事件的程序的命令:
$ RUST_LOG='mongodb::connection=debug' cargo run
以下部分介绍如何使用跟踪或日志记录来使用事件。
实施追踪
要启用跟踪,还必须将tracing-subscriber
依赖项添加到Cargo.toml
文件中。 以下代码显示了包含驱动程序依赖项和tracing-subscriber
包的示例依赖项列表:
[dependencies] tracing = "0.1.37" tracing-subscriber = "0.3.17" [dependencies.mongodb] version = "3.1.0" features = ["tracing-unstable"]
然后,在您的应用程序中,您必须注册一个实现tracing::Subscriber
特征的类型,以通过跟踪使用事件。 以下代码展示了如何注册使用RUST_LOG
环境变量规范的跟踪订阅器:
tracing_subscriber::fmt::init();
提示
要了解有关注册订阅者的更多信息,请参阅tracing
文档。
如果您在debug
级别运行应用程序并跟踪命令,则每当您执行操作时,驱动程序都会发出消息。 以下代码显示了此跟踪规范的命令:
$ RUST_LOG='mongodb::command=debug' cargo run
指定debug
级别跟踪后,当您执行写入操作时,驱动程序会生成跟踪消息:
let my_coll = client.database("db").collection("test_coll"); my_coll.insert_one(doc! { "x" : 1 }).await?;
2023-07-21T17:37:13.587794Z DEBUG mongodb::command: Command started topologyId="..." command="{\"insert\":\"test_coll\", ...}" databaseName="test" commandName="insert" requestId=12 driverConnectionId=1 serverConnectionId=133839 serverHost="..." serverPort=27017 2023-07-21T17:37:13.630401Z DEBUG mongodb::command: Command succeeded topologyId="..." reply="{\"n\":1, ...}" commandName="insert" requestId=12 driverConnectionId=1 serverConnectionId=133839 serverHost="..." serverPort=27017 durationMS=42
实施日志记录
要启用日志记录,还必须将log
或log-always
功能标志添加到Cargo.toml
文件中的tracing
依赖项。 您还必须为日志记录包添加依赖项,例如env_logger
:
[dependencies] tracing = { version = "0.1.37", features = ["log"] } env_logger = "0.10.0" [dependencies.mongodb] version = "3.1.0" features = ["tracing-unstable"]
然后,在您的应用程序中,您必须注册一个全局记录器,以通过日志记录来使用事件。 以下代码展示了如何注册使用RUST_LOG
环境变量规范的记录器:
env_logger::init();
如果您在debug
级别运行应用程序并记录连接,则每当您打开、使用和关闭连接时,驱动程序都会发出消息。 以下代码显示了此日志记录规范的命令:
$ RUST_LOG='mongodb::connection=debug' cargo run
通过指定debug
级别跟踪,当您打开并使用连接时,驱动程序会生成日志消息:
let my_coll = client.database("db").collection("test_coll"); my_coll.insert_one(doc! { "x" : 1 }).await?;
[2023-07-21T18:13:00Z DEBUG mongodb::connection] Connection pool created topologyId="..." serverHost="..." serverPort=27017 [2023-07-21T18:13:00Z DEBUG mongodb::connection] Connection pool created topologyId="..." serverHost="..." serverPort=27017 [2023-07-21T18:13:00Z DEBUG mongodb::connection] Connection pool created topologyId="..." serverHost="..." serverPort=27017 [2023-07-21T18:13:00Z DEBUG mongodb::connection] Connection pool ready topologyId="..." serverHost="..." serverPort=27017 [2023-07-21T18:13:00Z DEBUG mongodb::connection] Connection checkout started topologyId="..." serverHost="..." serverPort=27017 [2023-07-21T18:13:00Z DEBUG mongodb::connection] Connection created topologyId="..." serverHost="..." serverPort=27017 driverConnectionId=1 ...
更多信息
要学习;了解有关设置客户端选项的详情,请参阅连接选项指南。