Skip to content

Commit dfca4a8

Browse files
LancernSpriteOvO
authored andcommitted
Fallback logger name to target from log crate if present (#50)
1 parent 77848bb commit dfca4a8

File tree

2 files changed

+33
-9
lines changed

2 files changed

+33
-9
lines changed

spdlog/src/record.rs

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ use crate::{Level, SourceLocation};
2424
// possible to correct.
2525
#[derive(Clone, Debug)]
2626
pub struct Record<'a> {
27-
logger_name: Option<&'a str>,
27+
logger_name: Option<Cow<'a, str>>,
2828
payload: Cow<'a, str>,
2929
inner: Cow<'a, RecordInner>,
3030
}
@@ -73,16 +73,16 @@ impl<'a> Record<'a> {
7373
#[must_use]
7474
pub fn to_owned(&self) -> RecordOwned {
7575
RecordOwned {
76-
logger_name: self.logger_name.map(|n| n.into()),
76+
logger_name: self.logger_name.clone().map(|n| n.into_owned()),
7777
payload: self.payload.to_string(),
7878
inner: self.inner.clone().into_owned(),
7979
}
8080
}
8181

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

8888
/// Gets the level.
@@ -121,7 +121,7 @@ impl<'a> Record<'a> {
121121
#[must_use]
122122
pub(crate) fn replace_payload(&'a self, new: impl Into<Cow<'a, str>>) -> Self {
123123
Self {
124-
logger_name: self.logger_name,
124+
logger_name: self.logger_name.clone(),
125125
payload: new.into(),
126126
inner: Cow::Borrowed(&self.inner),
127127
}
@@ -137,7 +137,16 @@ impl<'a> Record<'a> {
137137
let args = record.args();
138138

139139
Self {
140-
logger_name: logger.name(),
140+
// If the logger has a name configured, use that name. Otherwise, the name can also be
141+
// given by the target of the log record.
142+
logger_name: logger.name().map(Cow::Borrowed).or_else(|| {
143+
let log_target = record.target();
144+
if log_target.is_empty() {
145+
None
146+
} else {
147+
Some(Cow::Owned(String::from(log_target)))
148+
}
149+
}),
141150
payload: match args.as_str() {
142151
Some(literal_str) => literal_str.into(),
143152
None => args.to_string().into(),
@@ -178,7 +187,7 @@ impl RecordOwned {
178187
#[must_use]
179188
pub fn as_ref(&self) -> Record {
180189
Record {
181-
logger_name: self.logger_name.as_deref(),
190+
logger_name: self.logger_name.as_deref().map(Cow::Borrowed),
182191
payload: Cow::Borrowed(&self.payload),
183192
inner: Cow::Borrowed(&self.inner),
184193
}
@@ -246,7 +255,7 @@ impl<'a> RecordBuilder<'a> {
246255
/// Sets the logger name.
247256
#[must_use]
248257
pub(crate) fn logger_name(mut self, logger_name: &'a str) -> Self {
249-
self.record.logger_name = Some(logger_name);
258+
self.record.logger_name = Some(Cow::Borrowed(logger_name));
250259
self
251260
}
252261

spdlog/tests/log_crate_proxy.rs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ fn test_source_location() {
1717
let sink = Arc::new(StringSink::with(|b| b.formatter(formatter)));
1818
let logger = Arc::new(build_test_logger(|b| b.sink(sink.clone())));
1919

20-
spdlog::init_log_crate_proxy().unwrap();
20+
spdlog::init_log_crate_proxy().ok();
2121
spdlog::log_crate_proxy().set_logger(Some(logger));
2222
log::set_max_level(log::LevelFilter::Trace);
2323

@@ -27,3 +27,18 @@ fn test_source_location() {
2727
"(log_crate_proxy::log_crate_proxy.rs) text\n"
2828
);
2929
}
30+
31+
#[cfg(feature = "log")]
32+
#[test]
33+
fn test_target() {
34+
let formatter = Box::new(PatternFormatter::new(pattern!("[{logger}] {payload}{eol}")));
35+
let sink = Arc::new(StringSink::with(|b| b.formatter(formatter)));
36+
let logger = Arc::new(build_test_logger(|b| b.sink(sink.clone())));
37+
38+
spdlog::init_log_crate_proxy().ok();
39+
spdlog::log_crate_proxy().set_logger(Some(logger));
40+
log::set_max_level(log::LevelFilter::Trace);
41+
42+
log::info!(target: "MyLogger", "body");
43+
assert_eq!(sink.clone_string(), "[MyLogger] body\n");
44+
}

0 commit comments

Comments
 (0)