mirror of https://github.com/fafhrd91/actix-web
feat: add ability to specify log level for access logger
This commit is contained in:
parent
ede0201aa4
commit
9e1b6c4db6
|
@ -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)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue