@@ -261,49 +261,57 @@ impl Logger {
261261 msg : & str ,
262262 fields : & Option < Fields > ,
263263 ) {
264- let fields = fields. as_ref ( ) . map ( |fields| {
265- fields. iter ( ) . map ( |( key, val) | match val {
266- serde_json:: Value :: Number ( num) => {
267- if num. is_i64 ( ) {
268- LogField {
269- key,
270- value : model:: LogFieldValue :: I64 ( num. as_i64 ( ) . unwrap ( ) ) ,
271- }
272- } else if num. is_u64 ( ) {
273- LogField {
274- key,
275- value : model:: LogFieldValue :: U64 ( num. as_u64 ( ) . unwrap ( ) ) ,
276- }
277- } else if num. is_f64 ( ) {
278- LogField {
279- key,
280- value : model:: LogFieldValue :: F64 ( num. as_f64 ( ) . unwrap ( ) ) ,
281- }
282- } else {
283- // this can't happen as we have handle all the cases above,
284- // but we need to handle this case for the iterator to function
285- LogField {
286- key,
287- value : model:: LogFieldValue :: Json ( & serde_json:: Value :: Null ) ,
264+ let fields = if !self . extra_fields . is_empty ( ) || fields. is_some ( ) {
265+ let field_vec: Vec < _ > = self
266+ . extra_fields
267+ . iter ( )
268+ . chain ( fields. iter ( ) . flat_map ( |f| f. iter ( ) ) )
269+ . map ( |( key, val) | match val {
270+ serde_json:: Value :: Number ( num) => {
271+ if num. is_i64 ( ) {
272+ LogField {
273+ key,
274+ value : model:: LogFieldValue :: I64 ( num. as_i64 ( ) . unwrap ( ) ) ,
275+ }
276+ } else if num. is_u64 ( ) {
277+ LogField {
278+ key,
279+ value : model:: LogFieldValue :: U64 ( num. as_u64 ( ) . unwrap ( ) ) ,
280+ }
281+ } else if num. is_f64 ( ) {
282+ LogField {
283+ key,
284+ value : model:: LogFieldValue :: F64 ( num. as_f64 ( ) . unwrap ( ) ) ,
285+ }
286+ } else {
287+ // this can't happen as we have handle all the cases above,
288+ // but we need to handle this case for the iterator to function
289+ LogField {
290+ key,
291+ value : model:: LogFieldValue :: Json ( & serde_json:: Value :: Null ) ,
292+ }
288293 }
289294 }
290- }
291- serde_json:: Value :: Bool ( b) => LogField {
292- key,
293- value : model:: LogFieldValue :: Bool ( b. to_owned ( ) ) ,
294- } ,
295- serde_json:: Value :: String ( ref str) => LogField {
296- key,
297- value : model:: LogFieldValue :: String ( str) ,
298- } ,
299- serde_json:: Value :: Array ( _)
300- | serde_json:: Value :: Object ( _)
301- | serde_json:: Value :: Null => LogField {
302- key,
303- value : model:: LogFieldValue :: Json ( val) ,
304- } ,
305- } )
306- } ) ;
295+ serde_json:: Value :: Bool ( b) => LogField {
296+ key,
297+ value : model:: LogFieldValue :: Bool ( * b) ,
298+ } ,
299+ serde_json:: Value :: String ( ref str) => LogField {
300+ key,
301+ value : model:: LogFieldValue :: String ( str) ,
302+ } ,
303+ serde_json:: Value :: Array ( _)
304+ | serde_json:: Value :: Object ( _)
305+ | serde_json:: Value :: Null => LogField {
306+ key,
307+ value : model:: LogFieldValue :: Json ( val) ,
308+ } ,
309+ } )
310+ . collect ( ) ;
311+ Some ( field_vec. into_iter ( ) )
312+ } else {
313+ None
314+ } ;
307315
308316 self . tracer
309317 . read ( )
0 commit comments