tracing_gcloud_layer/
default_mapper.rs1use serde_json::{Value, json};
2
3use crate::{
4 extract_trace_id, get_severity,
5 google_logger::{LogContext, LogMapper},
6 log_entry::{Labels, Resource},
7};
8
9#[derive(Clone, Debug, Default)]
10pub struct DefaultLogMapper;
11
12impl LogMapper for DefaultLogMapper {
13 fn map(&self, context: LogContext, log_entry: Value) -> Value {
14 let log_name = format!("projects/{}/logs/{}", context.project_id, context.log_label);
15
16 let trace_id =
17 extract_trace_id(&log_entry).unwrap_or_else(|| json!("trace_id is undefined"));
18
19 json!({
20 "log_name": log_name,
21 "resource": Resource::new_global(context.project_id.to_string()),
22 "severity": get_severity(&log_entry),
23 "timestamp": log_entry
24 .get("time")
25 .cloned()
26 .unwrap_or_else(|| json!(chrono::Utc::now().to_rfc3339())),
27 "json_payload": log_entry,
28 "trace": trace_id.clone(),
29 "labels": Labels {
30 context: context.log_label.to_string(),
31 request_id: trace_id,
32 },
33 })
34 }
35}