From e78cf4710a3469bfc4b12accc3f67917381c4288 Mon Sep 17 00:00:00 2001 From: David Calavera Date: Sat, 16 Jul 2022 09:04:52 -0700 Subject: [PATCH] Add Tower TraceLayer examples This example shows how to print a log for every incoming request and outgoing response automatically. Signed-off-by: David Calavera --- examples/http-tower-trace/Cargo.toml | 19 +++++++++++++++++++ examples/http-tower-trace/src/main.rs | 22 ++++++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 examples/http-tower-trace/Cargo.toml create mode 100644 examples/http-tower-trace/src/main.rs diff --git a/examples/http-tower-trace/Cargo.toml b/examples/http-tower-trace/Cargo.toml new file mode 100644 index 00000000..2b8f7a60 --- /dev/null +++ b/examples/http-tower-trace/Cargo.toml @@ -0,0 +1,19 @@ +[package] +name = "http-tower-trace" +version = "0.1.0" +edition = "2021" + + +# Use cargo-edit(https://github.com/killercup/cargo-edit#installation) +# to manage dependencies. +# Running `cargo add DEPENDENCY_NAME` will +# add the latest version of a dependency to the list, +# and it will keep the alphabetic ordering for you. + +[dependencies] +lambda_http = { path = "../../lambda-http" } +lambda_runtime = "0.5.1" +tokio = { version = "1", features = ["macros"] } +tower-http = { version = "0.3.4", features = ["trace"] } +tracing = { version = "0.1", features = ["log"] } +tracing-subscriber = { version = "0.3", default-features = false, features = ["fmt"] } diff --git a/examples/http-tower-trace/src/main.rs b/examples/http-tower-trace/src/main.rs new file mode 100644 index 00000000..ec7020c1 --- /dev/null +++ b/examples/http-tower-trace/src/main.rs @@ -0,0 +1,22 @@ +use lambda_http::{run, tower::ServiceBuilder, Error}; +use lambda_http::{Request, Response}; +use tower_http::trace::{DefaultOnRequest, DefaultOnResponse, TraceLayer}; +use tracing::Level; + +async fn handler(_req: Request) -> Result, Error> { + Ok(Response::new("Success".into())) +} + +#[tokio::main] +async fn main() -> Result<(), Error> { + tracing_subscriber::fmt().without_time().init(); + + let layer = TraceLayer::new_for_http() + .on_request(DefaultOnRequest::new().level(Level::INFO)) + .on_response(DefaultOnResponse::new().level(Level::INFO)); + + let service = ServiceBuilder::new().layer(layer).service_fn(handler); + + run(service).await?; + Ok(()) +}