@@ -24,7 +24,7 @@ use crate::{Level, SourceLocation};
24
24
// possible to correct.
25
25
#[ derive( Clone , Debug ) ]
26
26
pub struct Record < ' a > {
27
- logger_name : Option < & ' a str > ,
27
+ logger_name : Option < Cow < ' a , str > > ,
28
28
payload : Cow < ' a , str > ,
29
29
inner : Cow < ' a , RecordInner > ,
30
30
}
@@ -73,16 +73,16 @@ impl<'a> Record<'a> {
73
73
#[ must_use]
74
74
pub fn to_owned ( & self ) -> RecordOwned {
75
75
RecordOwned {
76
- logger_name : self . logger_name . map ( |n| n. into ( ) ) ,
76
+ logger_name : self . logger_name . clone ( ) . map ( |n| n. into_owned ( ) ) ,
77
77
payload : self . payload . to_string ( ) ,
78
78
inner : self . inner . clone ( ) . into_owned ( ) ,
79
79
}
80
80
}
81
81
82
82
/// Gets the logger name.
83
83
#[ 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 ( ) )
86
86
}
87
87
88
88
/// Gets the level.
@@ -121,7 +121,7 @@ impl<'a> Record<'a> {
121
121
#[ must_use]
122
122
pub ( crate ) fn replace_payload ( & ' a self , new : impl Into < Cow < ' a , str > > ) -> Self {
123
123
Self {
124
- logger_name : self . logger_name ,
124
+ logger_name : self . logger_name . clone ( ) ,
125
125
payload : new. into ( ) ,
126
126
inner : Cow :: Borrowed ( & self . inner ) ,
127
127
}
@@ -137,7 +137,16 @@ impl<'a> Record<'a> {
137
137
let args = record. args ( ) ;
138
138
139
139
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
+ } ) ,
141
150
payload : match args. as_str ( ) {
142
151
Some ( literal_str) => literal_str. into ( ) ,
143
152
None => args. to_string ( ) . into ( ) ,
@@ -178,7 +187,7 @@ impl RecordOwned {
178
187
#[ must_use]
179
188
pub fn as_ref ( & self ) -> Record {
180
189
Record {
181
- logger_name : self . logger_name . as_deref ( ) ,
190
+ logger_name : self . logger_name . as_deref ( ) . map ( Cow :: Borrowed ) ,
182
191
payload : Cow :: Borrowed ( & self . payload ) ,
183
192
inner : Cow :: Borrowed ( & self . inner ) ,
184
193
}
@@ -246,7 +255,7 @@ impl<'a> RecordBuilder<'a> {
246
255
/// Sets the logger name.
247
256
#[ must_use]
248
257
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) ) ;
250
259
self
251
260
}
252
261
0 commit comments