use tracing::{Level, warn};
use xitca_http::util::middleware;
use crate::service::Service;
pub struct Logger {
logger: middleware::Logger,
}
impl Default for Logger {
fn default() -> Self {
Self::new()
}
}
impl Logger {
pub fn new() -> Self {
Self::with_level(Level::INFO)
}
pub fn with_level(level: Level) -> Self {
if let Err(e) = tracing_subscriber::fmt().with_max_level(level).try_init() {
warn!("failed to initialize global trace dispatcher: {}", e);
}
Self {
logger: middleware::Logger::with_level(level),
}
}
}
impl<Arg> Service<Arg> for Logger
where
middleware::Logger: Service<Arg>,
{
type Response = <middleware::Logger as Service<Arg>>::Response;
type Error = <middleware::Logger as Service<Arg>>::Error;
async fn call(&self, arg: Arg) -> Result<Self::Response, Self::Error> {
self.logger.call(arg).await
}
}