14 个版本

0.3.0 2024年6月10日
0.2.4 2024年3月27日
0.2.1 2023年12月19日
0.2.0 2023年6月22日
0.1.3 2020年8月17日

#167数据库接口

Download history 28/week @ 2024-05-09 75/week @ 2024-05-16 124/week @ 2024-05-23 100/week @ 2024-05-30 224/week @ 2024-06-06 147/week @ 2024-06-13 120/week @ 2024-06-20 105/week @ 2024-06-27 114/week @ 2024-07-04 111/week @ 2024-07-11 273/week @ 2024-07-18 286/week @ 2024-07-25 182/week @ 2024-08-01 228/week @ 2024-08-08 216/week @ 2024-08-15

927 每月下载量
3 个crate中使用(通过 pepe-pg

MIT 许可证

36KB
656

Maintenance

diesel-tracing

diesel-tracing 提供了可以用于替代 diesel 连接的连接结构,具有额外的跟踪和日志记录功能。

使用方法

特性标志

与 diesel 类似,这个 crate 依赖于一些特性标志来指定支持的数据库驱动程序。就像在 diesel 中一样,在 Cargo.toml 中进行配置

[dependencies]
diesel-tracing = { version = "<version>", features = ["<postgres|mysql|sqlite>"] }

建立连接

diesel-tracing 有几个经过仪表化的连接结构,它们包装了底层的 diesel 连接实现。由于这些结构也实现了 diesel::Connection 特性,因此建立连接的方式与 diesel crate 相同。例如,使用 postgres 特性标志

#[cfg(feature = "postgres")]
{
    use diesel_tracing::pg::InstrumentedPgConnection;

    let conn = InstrumentedPgConnection::establish("postgresql://example");
}

这个连接可以使用 diesel dsl 方法,如 diesel::prelude::RunQueryDsl::executediesel::prelude::RunQueryDsl::get_results

代码重用

在某些应用程序中,可能希望能够同时使用经过仪表化和未经仪表化的连接。例如,在库的测试中。为了实现这一点,您可以使用 diesel::Connection 特性。

fn use_connection(
    conn: &impl diesel::Connection<Backend = diesel::pg::Pg>,
) -> () {}

它将接受此 crate 提供的 diesel::PgConnectionInstrumentedPgConnection,如果您更改函数签名中的参数化 Backend 标记,这同样适用于其他 Connection 实现。

不幸的是,有一些特定于后端的特定方法没有被 diesel::Connection 特性封装,因此在这些地方,您可能只需要将连接类型替换为仪表化版本。

连接池

diesel-tracing 支持通过 r2d2 功能标志使用 r2d2 连接池。有关使用详情,请参阅 diesel::r2d2

备注

字段

目前记录的少量字段是 OpenTelemetry 对数据库语义约定(见 数据库)的一个子集。这是为了与 tracing-opentelemetry crate 兼容而选择的,但如果需要其他标准可用,这可以通过功能标志在将来设置。

可以通过启用 statement-fields 功能选择性地记录数据库语句。这使用 diesel::debug_query 将查询转换为字符串。由于这可能暴露敏感信息,因此该功能默认不启用。

能够解析连接字符串以提供更多信息将非常有用,但如果需要默认使用 diesel 功能标志来访问底层 C 绑定,这可能很困难。

级别

目前所有日志记录的跟踪都设置为 DEBUG 级别,这可能会更改为不同的默认值或通过功能标志进行配置。目前这个 crate 还相当新,尚不清楚什么是一个合理的默认值。

错误

连接方法返回的结果对象中的错误应该通过在 instrument 宏中的 err 指令自动记录。

敏感信息

由于语句可能包含敏感信息,因此它们目前未明确记录,除非您通过启用 statement-fields 功能来选择加入。找到一种智能过滤语句以解决这个问题是一个 TODO。

同样,连接字符串也不会记录在跨度中,因为它们可能包含密码。

TODO

  • 记录和日志记录连接信息(过滤掉敏感字段)
  • 提供一种过滤语句的方法,可能是基于正则表达式?

许可证:MIT

依赖关系

~3–12MB
~151K SLoC