Skip to content

Commit

Permalink
Fallback logger name to target from log crate if present (#50)
Browse files Browse the repository at this point in the history
  • Loading branch information
Lancern authored Dec 19, 2023
1 parent 77848bb commit 57ae0a4
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 8 deletions.
23 changes: 16 additions & 7 deletions spdlog/src/record.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ use crate::{Level, SourceLocation};
// possible to correct.
#[derive(Clone, Debug)]
pub struct Record<'a> {
logger_name: Option<&'a str>,
logger_name: Option<Cow<'a, str>>,
payload: Cow<'a, str>,
inner: Cow<'a, RecordInner>,
}
Expand Down Expand Up @@ -73,16 +73,16 @@ impl<'a> Record<'a> {
#[must_use]
pub fn to_owned(&self) -> RecordOwned {
RecordOwned {
logger_name: self.logger_name.map(|n| n.into()),
logger_name: self.logger_name.clone().map(|n| n.into_owned()),
payload: self.payload.to_string(),
inner: self.inner.clone().into_owned(),
}
}

/// Gets the logger name.
#[must_use]
pub fn logger_name(&self) -> Option<&'a str> {
self.logger_name
pub fn logger_name(&self) -> Option<&str> {
self.logger_name.as_ref().map(|n| n.as_ref())
}

/// Gets the level.
Expand Down Expand Up @@ -137,7 +137,16 @@ impl<'a> Record<'a> {
let args = record.args();

Self {
logger_name: logger.name(),
// If the logger has a name configured, use that name. Otherwise, the name can also be
// given by the target of the log record.
logger_name: logger.name().map(Cow::Borrowed).or_else(|| {
let log_target = record.target();
if log_target.is_empty() {
None
} else {
Some(Cow::Owned(String::from(log_target)))
}
}),
payload: match args.as_str() {
Some(literal_str) => literal_str.into(),
None => args.to_string().into(),
Expand Down Expand Up @@ -178,7 +187,7 @@ impl RecordOwned {
#[must_use]
pub fn as_ref(&self) -> Record {
Record {
logger_name: self.logger_name.as_deref(),
logger_name: self.logger_name.as_deref().map(Cow::Borrowed),
payload: Cow::Borrowed(&self.payload),
inner: Cow::Borrowed(&self.inner),
}
Expand Down Expand Up @@ -246,7 +255,7 @@ impl<'a> RecordBuilder<'a> {
/// Sets the logger name.
#[must_use]
pub(crate) fn logger_name(mut self, logger_name: &'a str) -> Self {
self.record.logger_name = Some(logger_name);
self.record.logger_name = Some(Cow::Borrowed(logger_name));
self
}

Expand Down
17 changes: 16 additions & 1 deletion spdlog/tests/log_crate_proxy.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ fn test_source_location() {
let sink = Arc::new(StringSink::with(|b| b.formatter(formatter)));
let logger = Arc::new(build_test_logger(|b| b.sink(sink.clone())));

spdlog::init_log_crate_proxy().unwrap();
spdlog::init_log_crate_proxy().ok();
spdlog::log_crate_proxy().set_logger(Some(logger));
log::set_max_level(log::LevelFilter::Trace);

Expand All @@ -27,3 +27,18 @@ fn test_source_location() {
"(log_crate_proxy::log_crate_proxy.rs) text\n"
);
}

#[cfg(feature = "log")]
#[test]
fn test_target() {
let formatter = Box::new(PatternFormatter::new(pattern!("[{logger}] {payload}{eol}")));
let sink = Arc::new(StringSink::with(|b| b.formatter(formatter)));
let logger = Arc::new(build_test_logger(|b| b.sink(sink.clone())));

spdlog::init_log_crate_proxy().ok();
spdlog::log_crate_proxy().set_logger(Some(logger));
log::set_max_level(log::LevelFilter::Trace);

log::info!(target: "MyLogger", "body");
assert_eq!(sink.clone_string(), "[MyLogger] body\n");
}

0 comments on commit 57ae0a4

Please sign in to comment.