Skip to content

Commit 28373a2

Browse files
authored
runtimes/core: write log rows extra_fields to traces (#2114)
1 parent 28e68ff commit 28373a2

File tree

1 file changed

+49
-41
lines changed

1 file changed

+49
-41
lines changed

runtimes/core/src/log/logger.rs

Lines changed: 49 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)