From 1d0aa502631ba3f79960a6f7e5f9be2099e03f6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20K=C3=B6rber?= Date: Tue, 29 Aug 2023 21:34:01 +0200 Subject: [PATCH] tracing --- rust/Cargo.lock | 106 ++++++++++++++++++++++++++++++++++++++++ rust/Cargo.toml | 8 +++ rust/src/main.rs | 5 +- rust/src/routing/mod.rs | 8 +++ rust/src/sqlite.rs | 16 +++++- 5 files changed, 140 insertions(+), 3 deletions(-) diff --git a/rust/Cargo.lock b/rust/Cargo.lock index 125b5ee..eee7cc7 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -29,6 +29,15 @@ dependencies = [ "version_check", ] +[[package]] +name = "aho-corasick" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6748e8def348ed4d14996fa801f4122cd763fff530258cdc03f64b25f89d3a5a" +dependencies = [ + "memchr", +] + [[package]] name = "allocator-api2" version = "0.2.16" @@ -746,6 +755,12 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "http-range-header" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f" + [[package]] name = "httparse" version = "1.8.0" @@ -901,6 +916,15 @@ version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + [[package]] name = "matchit" version = "0.7.2" @@ -1085,6 +1109,7 @@ dependencies = [ "clap", "futures", "hyper", + "log", "maud", "serde", "serde_variant", @@ -1092,6 +1117,7 @@ dependencies = [ "time", "tokio", "tower", + "tower-http", "tracing", "tracing-subscriber", "uuid", @@ -1287,6 +1313,50 @@ dependencies = [ "bitflags 1.3.2", ] +[[package]] +name = "regex" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81bc1d4caf89fac26a70747fe603c130093b53c773888797a6329091246d651a" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.3.6", + "regex-syntax 0.7.4", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fed1ceff11a1dddaee50c9dc8e4938bd106e9d89ae372f192311e7da498e3b69" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.7.4", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2" + [[package]] name = "ring" version = "0.16.20" @@ -1982,6 +2052,25 @@ dependencies = [ "tracing", ] +[[package]] +name = "tower-http" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55ae70283aba8d2a8b411c695c437fe25b8b5e44e23e780662002fc72fb47a82" +dependencies = [ + "bitflags 2.4.0", + "bytes", + "futures-core", + "futures-util", + "http", + "http-body", + "http-range-header", + "pin-project-lite", + "tower-layer", + "tower-service", + "tracing", +] + [[package]] name = "tower-layer" version = "0.3.2" @@ -2039,18 +2128,35 @@ dependencies = [ "tracing-core", ] +[[package]] +name = "tracing-serde" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1" +dependencies = [ + "serde", + "tracing-core", +] + [[package]] name = "tracing-subscriber" version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77" dependencies = [ + "matchers", "nu-ansi-term", + "once_cell", + "regex", + "serde", + "serde_json", "sharded-slab", "smallvec", "thread_local", + "tracing", "tracing-core", "tracing-log", + "tracing-serde", ] [[package]] diff --git a/rust/Cargo.toml b/rust/Cargo.toml index 3220a96..21169e2 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -11,6 +11,9 @@ path = "src/main.rs" opt-level = 0 lto = "off" +[dependencies.log] +version = "0.4" + [dependencies.clap] version = "4" features = ["derive"] @@ -30,11 +33,16 @@ features = ["full"] [dependencies.tower] version = "0.4" +[dependencies.tower-http] +version = "0.4" +features = ["trace"] + [dependencies.tracing] version = "0.1" [dependencies.tracing-subscriber] version = "0.3" +features = ["json", "env-filter"] [dependencies.maud] version = "0.25" diff --git a/rust/src/main.rs b/rust/src/main.rs index 2707141..6b6d95c 100644 --- a/rust/src/main.rs +++ b/rust/src/main.rs @@ -79,7 +79,10 @@ async fn main() -> MainResult { match args.command { Command::Serve(serve_args) => { tracing_subscriber::fmt() - .with_max_level(tracing::Level::DEBUG) + // .with_max_level(tracing::Level::DEBUG) + // .with_target(false) + .with_env_filter("none,packager=debug,request=debug,sqlx=debug") + .compact() .init(); if let Err(e) = sqlite::migrate(&args.database_url).await { diff --git a/rust/src/routing/mod.rs b/rust/src/routing/mod.rs index 1b597e9..fad5982 100644 --- a/rust/src/routing/mod.rs +++ b/rust/src/routing/mod.rs @@ -5,6 +5,9 @@ use axum::{ Router, }; +use tower_http::trace; +use tracing::Level; + use crate::{AppState, Error, RequestError, TopLevelPage}; use super::auth; @@ -123,4 +126,9 @@ pub fn router(state: AppState) -> Router { }) }) .with_state(state) + .layer( + trace::TraceLayer::new_for_http() + .make_span_with(trace::DefaultMakeSpan::new().level(Level::INFO)) + .on_response(trace::DefaultOnResponse::new().level(Level::INFO)), + ) } diff --git a/rust/src/sqlite.rs b/rust/src/sqlite.rs index 533f68c..24dfef8 100644 --- a/rust/src/sqlite.rs +++ b/rust/src/sqlite.rs @@ -1,4 +1,7 @@ +use std::time; + use sqlx::sqlite::{SqliteConnectOptions, SqlitePoolOptions}; +use sqlx::ConnectOptions; pub use sqlx::{Pool, Sqlite}; use std::str::FromStr as _; @@ -8,14 +11,23 @@ use crate::StartError; pub async fn init_database_pool(url: &str) -> Result, StartError> { Ok(SqlitePoolOptions::new() .max_connections(5) - .connect_with(SqliteConnectOptions::from_str(url)?.pragma("foreign_keys", "1")) + .connect_with( + SqliteConnectOptions::from_str(url)? + .log_statements(log::LevelFilter::Off) + .log_slow_statements(log::LevelFilter::Warn, time::Duration::from_millis(100)) + .pragma("foreign_keys", "1"), + ) .await?) } pub async fn migrate(url: &str) -> Result<(), StartError> { let pool = SqlitePoolOptions::new() .max_connections(5) - .connect_with(SqliteConnectOptions::from_str(url)?.pragma("foreign_keys", "0")) + .connect_with( + SqliteConnectOptions::from_str(url)? + .pragma("foreign_keys", "0") + .log_statements(log::LevelFilter::Off), + ) .await?; sqlx::migrate!().run(&pool).await?;