lldap/server/src/infra/logging.rs

51 lines
1.6 KiB
Rust
Raw Normal View History

2021-03-02 19:51:33 +00:00
use crate::infra::configuration::Configuration;
2022-04-15 11:52:20 +00:00
use actix_web::{
dev::{ServiceRequest, ServiceResponse},
Error,
};
use tracing::{error, info, Span};
use tracing_actix_web::{root_span, RootSpanBuilder};
use tracing_subscriber::{filter::EnvFilter, layer::SubscriberExt, util::SubscriberInitExt};
2021-03-02 19:51:33 +00:00
2022-04-15 11:52:20 +00:00
/// We will define a custom root span builder to capture additional fields, specific
/// to our application, on top of the ones provided by `DefaultRootSpanBuilder` out of the box.
pub struct CustomRootSpanBuilder;
2022-04-15 11:52:20 +00:00
impl RootSpanBuilder for CustomRootSpanBuilder {
fn on_request_start(request: &ServiceRequest) -> Span {
let span = root_span!(request);
span.in_scope(|| {
info!(uri = %request.uri());
});
span
}
2022-04-15 11:52:20 +00:00
fn on_request_end<B>(_: Span, outcome: &Result<ServiceResponse<B>, Error>) {
match &outcome {
Ok(response) => {
if let Some(error) = response.response().error() {
error!(?error);
} else {
info!(status_code = &response.response().status().as_u16());
}
}
Err(error) => error!(?error),
};
}
}
2022-04-15 11:52:20 +00:00
pub fn init(config: &Configuration) -> anyhow::Result<()> {
let env_filter = EnvFilter::try_from_default_env().unwrap_or_else(|_| {
EnvFilter::new(if config.verbose {
"sqlx=warn,debug"
} else {
"sqlx=warn,info"
})
});
tracing_subscriber::registry()
.with(env_filter)
.with(tracing_forest::ForestLayer::default())
.init();
Ok(())
}