feat: add ability to specify log level for access logger

This commit is contained in:
Tglman 2023-09-27 23:03:05 +01:00
parent ede0201aa4
commit 9e1b6c4db6
1 changed files with 28 additions and 4 deletions

View File

@ -16,7 +16,7 @@ use actix_service::{Service, Transform};
use actix_utils::future::{ready, Ready}; use actix_utils::future::{ready, Ready};
use bytes::Bytes; use bytes::Bytes;
use futures_core::ready; use futures_core::ready;
use log::{debug, warn}; use log::{debug, warn, Level};
use pin_project_lite::pin_project; use pin_project_lite::pin_project;
use regex::{Regex, RegexSet}; use regex::{Regex, RegexSet};
use time::{format_description::well_known::Rfc3339, OffsetDateTime}; use time::{format_description::well_known::Rfc3339, OffsetDateTime};
@ -47,7 +47,7 @@ use crate::{
/// ``` /// ```
/// use actix_web::{middleware::Logger, App}; /// use actix_web::{middleware::Logger, App};
/// ///
/// // access logs are printed with the INFO level so ensure it is enabled by default /// // access logs by default are printed with the INFO level so ensure it is enabled by default
/// env_logger::init_from_env(env_logger::Env::new().default_filter_or("info")); /// env_logger::init_from_env(env_logger::Env::new().default_filter_or("info"));
/// ///
/// let app = App::new() /// let app = App::new()
@ -89,6 +89,7 @@ struct Inner {
exclude: HashSet<String>, exclude: HashSet<String>,
exclude_regex: RegexSet, exclude_regex: RegexSet,
log_target: Cow<'static, str>, log_target: Cow<'static, str>,
level: Level,
} }
impl Logger { impl Logger {
@ -99,6 +100,7 @@ impl Logger {
exclude: HashSet::new(), exclude: HashSet::new(),
exclude_regex: RegexSet::empty(), exclude_regex: RegexSet::empty(),
log_target: Cow::Borrowed(module_path!()), log_target: Cow::Borrowed(module_path!()),
level: Level::Info,
})) }))
} }
@ -139,6 +141,22 @@ impl Logger {
self self
} }
/// Sets the logging level.
///
/// By default, the log level is `Level::Info`
///
/// # Examples
/// ```
/// Logger::default()
/// .level(Level::Debug);
/// ```
///
pub fn level(mut self, level: Level) -> Self {
let inner = Rc::get_mut(&mut self.0).unwrap();
inner.level = level;
self
}
/// Register a function that receives a ServiceRequest and returns a String for use in the /// Register a function that receives a ServiceRequest and returns a String for use in the
/// log line. The label passed as the first argument should match a replacement substring in /// log line. The label passed as the first argument should match a replacement substring in
/// the logger format like `%{label}xi`. /// the logger format like `%{label}xi`.
@ -242,6 +260,7 @@ impl Default for Logger {
exclude: HashSet::new(), exclude: HashSet::new(),
exclude_regex: RegexSet::empty(), exclude_regex: RegexSet::empty(),
log_target: Cow::Borrowed(module_path!()), log_target: Cow::Borrowed(module_path!()),
level: Level::Info,
})) }))
} }
} }
@ -308,6 +327,7 @@ where
format: None, format: None,
time: OffsetDateTime::now_utc(), time: OffsetDateTime::now_utc(),
log_target: Cow::Borrowed(""), log_target: Cow::Borrowed(""),
level: self.inner.level,
_phantom: PhantomData, _phantom: PhantomData,
} }
} else { } else {
@ -323,6 +343,7 @@ where
format: Some(format), format: Some(format),
time: now, time: now,
log_target: self.inner.log_target.clone(), log_target: self.inner.log_target.clone(),
level: self.inner.level,
_phantom: PhantomData, _phantom: PhantomData,
} }
} }
@ -340,6 +361,7 @@ pin_project! {
time: OffsetDateTime, time: OffsetDateTime,
format: Option<Format>, format: Option<Format>,
log_target: Cow<'static, str>, log_target: Cow<'static, str>,
level:Level,
_phantom: PhantomData<B>, _phantom: PhantomData<B>,
} }
} }
@ -386,6 +408,7 @@ where
let time = *this.time; let time = *this.time;
let format = this.format.take(); let format = this.format.take();
let log_target = this.log_target.clone(); let log_target = this.log_target.clone();
let level = *this.level;
Poll::Ready(Ok(res.map_body(move |_, body| StreamLog { Poll::Ready(Ok(res.map_body(move |_, body| StreamLog {
body, body,
@ -393,6 +416,7 @@ where
format, format,
size: 0, size: 0,
log_target, log_target,
level,
}))) })))
} }
} }
@ -405,6 +429,7 @@ pin_project! {
size: usize, size: usize,
time: OffsetDateTime, time: OffsetDateTime,
log_target: Cow<'static, str>, log_target: Cow<'static, str>,
level:Level,
} }
impl<B> PinnedDrop for StreamLog<B> { impl<B> PinnedDrop for StreamLog<B> {
@ -417,8 +442,7 @@ pin_project! {
Ok(()) Ok(())
}; };
log::info!( log::log!(target: this.log_target.as_ref(), this.level,
target: this.log_target.as_ref(),
"{}", FormatDisplay(&render) "{}", FormatDisplay(&render)
); );
} }