仕事と趣味でやっている技術領域が違いすぎて投稿内容に全く統一性がなく、ブログの方向性が見えないが とりあえず今日も今日とて書いていく。
Prisma Client Rustで実際に実行されたログの叩き方がわからなかったので調査した。
ちなみに、Prisma Client RustはPrismaというORMのRustクライアント。 本家のJavascript/Typescriptクライアントと構造は同じでクライアントがprisma engineという中間層経由でDBMSとやりとりをする。
TL; DR;
tracingとtracing-subscriberのcrateを入れる.- 実行コードの先頭で
tracing_subscriber::fmt::init();を記述 RUST_LOG=quaint=debug LOG_QUERIES=1 cargo runでログを有効にしで実行.
tracingとtracing-subscriber crateの導入
Rust Prisma Clientは内部的にtracingというログライブラリを使用しているためログ出力側もtracingを使う必要がある.
cargo add tracing tracing-subscriberロガーの登録
部分的に別のロガーを使うといったこともできるようだが、
今回は簡単のためtracing_subscriber::fmt::init(); でグローバルなロガーを登録.
ログの有効化
- prisma engineが実際に実行したクエリをログとして吐くのだが、ドキュメントによると、環境変数
LOG_QUERIESを適当な値で設定すればログが出力されるようになる. tracing_subscriber::fmt::init()は環境変数RUST_LOGを使うことによりログのフィルタができる.- prisma engineはquaintというSQLデータベスの抽象化層を経由してクエリを実行しているため、
RUST_LOGでquaint=debugとすることでquaintのDEBUGレベル以上のログだけを出力することができる. - ドキュメントにはINFOレベルで出力されると書かれているがDEBUGレベルで出力されていたのでinfoではなくdebugを設定
- prisma engineはquaintというSQLデータベスの抽象化層を経由してクエリを実行しているため、