Expand description
Structured JSON logging from tracing
with fields from spans
Unlike the JSON support in tracing_subscriber
, this
implementation treats spans as a way to provide context and adds all fields from all spans to the logged events.
§Examples
use tracing::{info, info_span};
use tracing_subscriber::prelude::*;
use tracing_json_span_fields::JsonLayer;
tracing_subscriber::registry().with(JsonLayer::pretty()).init();
let _span = info_span!("A span", span_field = 42).entered();
info!(logged_message_field = "value", "Logged message");
Will produce the following output
{
"log_level": "INFO",
"logged_message_field": "value",
"message": "Logged message",
"name": "event src/main.rs:123",
"span_field": 42,
"target": "tracing_json",
"timestamp": "2023-07-25T09:53:01.790152227Z"
}
§Customising timestamps
use time::macros::format_description;
use tracing::{error, info_span};
use tracing::level_filters::LevelFilter;
use tracing_subscriber::prelude::*;
use tracing_json_span_fields::JsonLayer;
let timestamp_format = format_description!("[hour]:[minute]:[second].[subsecond digits:1]");
tracing_subscriber::registry().with(JsonLayer::default().with_timestamp_format(timestamp_format).with_level(LevelFilter::ERROR)).init();
let _span = info_span!("A span", span_field = 42).entered();
error!(logged_message_field = "value", "Logged message");
Will produce the following output
{"log_level":"ERROR","logged_message_field":"value","message":"Logged message","name":"event src/main.rs:123","target":"tracing_json","timestamp":"10:02:01.9"}
§Thanks
Structs§
- Json
Layer - An implementation of a
tracing_subscriber::Layer
that writes events as JSON using aJsonOutput
. - Json
Stdout - Default
JsonOutput
writing to stdout.
Traits§
- Json
Output - Something that can be used to write output from a
JsonLayer
.