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 在 数据库接口 中
927 每月下载量
在 3 个crate中使用(通过 pepe-pg)
36KB
656 行
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::execute
或 diesel::prelude::RunQueryDsl::get_results
。
代码重用
在某些应用程序中,可能希望能够同时使用经过仪表化和未经仪表化的连接。例如,在库的测试中。为了实现这一点,您可以使用 diesel::Connection
特性。
fn use_connection(
conn: &impl diesel::Connection<Backend = diesel::pg::Pg>,
) -> () {}
它将接受此 crate 提供的 diesel::PgConnection
和 InstrumentedPgConnection
,如果您更改函数签名中的参数化 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