Setting up level
with custom name and values
#16
Replies: 2 comments
-
OMG thank you @mladedav, It's exactly what I needed! I think I managed to generate logs compliant with GCP with this setup: let mut layer: JsonLayer = json_subscriber::JsonLayer::stdout();
layer.add_dynamic_field("severity", |event, _ctx| {
let level = event.metadata().level();
match level {
&Level::ERROR => Some("ERROR"),
&Level::WARN => Some("WARNING"),
&Level::INFO => Some("INFO"),
&Level::DEBUG | &Level::TRACE => Some("DEBUG"),
}
});
layer.add_dynamic_field("spanId", |event, ctx| {
if let Some(span) = ctx.event_span(event) {
return Some(span.name());
}
None
});
layer
.with_event("jsonPayload")
.with_timer("timestamp", SystemTime);
let subscriber = tracing_subscriber::Registry::default().with(layer);
tracing::subscriber::set_global_default(subscriber).unwrap(); The output is: {"jsonPayload":{"message":"some info message","someField":"some value"},"severity":"ERROR","spanId":"some_span","timestam
p":"2025-06-18T13:19:47.118078Z"} |
Beta Was this translation helpful? Give feedback.
-
Actually, my setup was incorrect. The So the fields I had to define myself are Here is my final configuration: fn setup_gcp_format() {
let mut layer: JsonLayer = json_subscriber::JsonLayer::stdout();
layer.with_flattened_event();
layer.add_dynamic_field("severity", |event, _ctx| {
let level = event.metadata().level();
match level {
&Level::ERROR => Some("ERROR"),
&Level::WARN => Some("WARNING"),
&Level::INFO => Some("INFO"),
&Level::DEBUG | &Level::TRACE => Some("DEBUG"),
}
});
layer.add_dynamic_field("logging.googleapis.com/spanId", |event, ctx| {
if let Some(span) = ctx.event_span(event) {
return Some(span.name());
}
None
});
Registry::default().with(layer).init();
} |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
To print log level with the key
severity
and withWARNING
instead ofWARN
, you can do this:and the output will be:
Beta Was this translation helpful? Give feedback.
All reactions