diff --git a/Cargo.lock b/Cargo.lock index 5f3e68f..db32cbc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -41,6 +41,15 @@ dependencies = [ "zerocopy", ] +[[package]] +name = "aho-corasick" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +dependencies = [ + "memchr", +] + [[package]] name = "allocator-api2" version = "0.2.16" @@ -62,6 +71,54 @@ dependencies = [ "libc", ] +[[package]] +name = "anstream" +version = "0.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e2e1ebcb11de5c03c67de28a7df593d32191b44939c482e97702baaaa6ab6a5" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2faccea4cc4ab4a667ce676a30e8ec13922a692c99bb8f5b11f1502c72e04220" + +[[package]] +name = "anstyle-parse" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" +dependencies = [ + "anstyle", + "windows-sys 0.52.0", +] + [[package]] name = "async-trait" version = "0.1.68" @@ -253,6 +310,12 @@ dependencies = [ "windows-targets 0.48.1", ] +[[package]] +name = "colorchoice" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" + [[package]] name = "config" version = "0.13.4" @@ -400,6 +463,29 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "env_filter" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a009aa4810eb158359dda09d0c87378e4bbb89b5a801f016885a4707ba24f7ea" +dependencies = [ + "log", + "regex", +] + +[[package]] +name = "env_logger" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05e7cf40684ae96ade6232ed84582f40ce0a66efcd43a5117aef610534f8e0b8" +dependencies = [ + "anstream", + "anstyle", + "env_filter", + "humantime", + "log", +] + [[package]] name = "equivalent" version = "1.0.1" @@ -781,6 +867,12 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + [[package]] name = "hyper" version = "0.14.27" @@ -988,12 +1080,14 @@ dependencies = [ "axum", "chrono", "config", + "env_logger", "hyper 1.1.0", "reqwest", "serde", "serde_json", "sqlx", "tokio", + "tracing", "uuid", ] @@ -1485,6 +1579,35 @@ dependencies = [ "bitflags 1.3.2", ] +[[package]] +name = "regex" +version = "1.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12de2eff854e5fa4b1295edd650e227e9d8fb0c9e90b12e7f36d6a6811791a29" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49530408a136e16e5b486e883fbb6ba058e8e4e8ae6621a77b048b314336e629" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" + [[package]] name = "reqwest" version = "0.11.18" @@ -2362,6 +2485,12 @@ version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" +[[package]] +name = "utf8parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" + [[package]] name = "uuid" version = "1.6.1" diff --git a/Cargo.toml b/Cargo.toml index 8d5f83a..a61d070 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,6 +25,8 @@ axum = { version = "0.7" } # tower-cookies = "0.10" # Others config = "0.13" +env_logger = "0.11" +tracing = { version = "0.1", features = ["log"] } # lazy-regex = "3" # async-trait = "0.1" # strum_macros = "0.25" diff --git a/src/main.rs b/src/main.rs index f1b50c3..20c8b5f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,4 @@ +use env_logger::Env; use learn_axum::configuration::get_configuration; use learn_axum::startup; use sqlx::PgPool; @@ -5,7 +6,9 @@ use tokio::net::TcpListener; #[tokio::main] /// Entry point for the application. +/// Log level default can be overridden with the RUST_LOG environment variable. async fn main() { + env_logger::Builder::from_env(Env::default().default_filter_or("info")).init(); let configuration = get_configuration().expect("Failed to read configuration."); let addr = format!("127.0.0.1:{}", configuration.application_port); let listener = TcpListener::bind(addr).await.unwrap(); //.expect("Unable to bind to port"); diff --git a/src/routes/subscriptions.rs b/src/routes/subscriptions.rs index a040d10..1bd4b79 100644 --- a/src/routes/subscriptions.rs +++ b/src/routes/subscriptions.rs @@ -14,7 +14,18 @@ struct FormData { } async fn subscribe(State(pool): State, Form(form): Form) { - let _ = sqlx::query!( + let request_id = Uuid::new_v4(); + tracing::info!( + "request_id {} - Adding '{}' '{}' as a new subscriber.", + request_id, + form.email, + form.name + ); + tracing::info!( + "request_id {} - Saving new subscriber details in the database", + request_id + ); + match sqlx::query!( r#" INSERT INTO subscriptions (id, email, name, subscribed_at) VALUES ($1, $2, $3, $4) @@ -27,7 +38,22 @@ async fn subscribe(State(pool): State, Form(form): Form) { // We use `get_ref` to get an immutable reference to the `PgConnection` // wrapped by `web::Data`. .execute(&pool) - .await; + .await + { + Ok(_) => { + tracing::info!( + "request_id {} - New subscriber details have been saved", + request_id + ); + } + Err(e) => { + tracing::error!( + "request_id {} - Failed to execute query: {:?}", + request_id, + e + ); + } + }; } pub fn routes_subscriptions(pool: PgPool) -> Router {