6 releases
0.1.0-alpha.6 | Jul 10, 2022 |
---|---|
0.1.0-alpha.5 | Jul 9, 2022 |
0.1.0-alpha.4 | Jul 6, 2022 |
0.1.0-alpha.3 | Jul 2, 2022 |
0.1.0-alpha.1 | Feb 13, 2021 |
#871 in Debugging
26 downloads per month
26KB
333 lines
Heavily inspired by Tracing Bunyan Formatter, just with some slight tweaks to the internals and the formatting. The actual formatting doesn't follow any defined specification, it's just something I view as readable and useful - I'm open to suggestions if people would like it aligned to a specific format.
Features
- All traces will receive their parent's attributes as well as their own, child attributes will take precedence if there are collisions
- There is a very minimal timing capability that adds elapsed time to
EVENT
andEXIT
traces TRACE
,DEBUG
andERROR
logs get slightly more metadata (file name, line number, module path & target) attached to them- Avoids panics - as much as possible it opts to handle failure by
eprintln
ing tostdout
. These scenarios should be few and far between, but it's better that a failure in your tracing implementation doesn't poison your main application. (although ideally it shouldn't fail silently)
All traces will receive their parent's attributes as well as their own, there is also a very minimal timing capability that adds elapsed time to Event
and Exit
traces
Basic Example
See /examples
for a slightly more complex example
use tracing::{subscriber::set_global_default, Subscriber};
use tracing_sprout::TrunkLayer;
use tracing_subscriber::prelude::*;
use tracing_subscriber::{EnvFilter, Registry};
let env_filter = EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("info"));
let formatting_layer = TrunkLayer::new("My Application".to_string(), env!("CARGO_PKG_VERSION").to_string(), std::io::stdout);
let subscriber = Registry::default()
.with(env_filter)
.with(formatting_layer);
set_global_default(subscriber).expect("failed to set up global tracing subscriber")
Example Output
Raw JSON
{"name":"I'm Groot","version":"0.1.0-alpha.1","id":"1","time":"Sat, 02 Jul 2022 09:33:59 -0600","msg":"[EPIC MONTAGE | START]","level":"info","span_type":"enter"}
{"name":"I'm Groot","version":"0.1.0-alpha.1","id":"1","group":["Peter Quill","Gamora","Drax","Rocket"],"time":"Sat, 02 Jul 2022 09:33:59 -0600","msg":"[EVENT] Trying to plug in the power","level":"trace","file":"examples/basic.rs","line":32,"target":"basic","thread_id":"ThreadId(1)","thread_name":"main","span_type":"event"}
{"name":"I'm Groot","version":"0.1.0-alpha.1","id":"2","info":"I'm overwriting my parents ID","time":"Sat, 02 Jul 2022 09:33:59 -0600","msg":"[MUSIC IS PLAYING | START]","level":"debug","file":"examples/basic.rs","line":34,"target":"basic","thread_id":"ThreadId(1)","thread_name":"main","span_type":"enter"}
Piped through CLI tool
In this case the CLI tool used was pino-pretty
[Sat, 02 Jul 2022 09:34:55 -0600] INFO (I'm Groot): [EPIC MONTAGE | STA
version: "0.1.0-alpha.1"
id: "1"
span_type: "enter"
[Sat, 02 Jul 2022 09:34:55 -0600] TRACE (I'm Groot): [EVENT] Trying to
version: "0.1.0-alpha.1"
id: "1"
group: [
"Peter Quill",
"Gamora",
"Drax",
"Rocket"
]
file: "examples/basic.rs"
line: 32
target: "basic"
thread_id: "ThreadId(1)"
thread_name: "main"
span_type: "event"
[Sat, 02 Jul 2022 09:34:55 -0600] DEBUG (I'm Groot): [MUSIC IS PLAYING | START]
version: "0.1.0-alpha.1"
id: "2"
info: "I'm overwriting my parents ID"
file: "examples/basic.rs"
line: 34
target: "basic"
thread_id: "ThreadId(1)"
thread_name: "main"
span_type: "enter"
[Sat, 02 Jul 2022 09:34:55 -0600] INFO (I'm Groot): [DANCE | START]
version: "0.1.0-alpha.1"
id: "2"
info: "I'm overwriting my parents ID"
span_type: "enter"
Dependencies
~2.7–3.5MB
~64K SLoC