Skip to content

Commit b7a839f

Browse files
authored
Remove brackets and message field name from rendered message (#19)
1 parent 5977c7f commit b7a839f

File tree

6 files changed

+128
-89
lines changed

6 files changed

+128
-89
lines changed

examples/basic.rs

+11-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use tracing::{debug, info, instrument, span, warn, Level};
1+
use tracing::{debug, error, info, instrument, span, warn, Level};
22
use tracing_subscriber::{layer::SubscriberExt, registry::Registry};
33
use tracing_tree::HierarchicalLayer;
44

@@ -34,6 +34,16 @@ fn main() {
3434
std::thread::sleep(std::time::Duration::from_millis(300));
3535
debug!("connected");
3636
});
37+
let peer3 = span!(
38+
Level::TRACE,
39+
"foomp",
40+
normal_var = 43,
41+
"{} <- format string",
42+
42
43+
);
44+
peer3.in_scope(|| {
45+
error!("hello");
46+
});
3747
peer1.in_scope(|| {
3848
warn!(algo = "xor", "weak encryption requested");
3949
std::thread::sleep(std::time::Duration::from_millis(300));

examples/basic.stdout

+27-22
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,40 @@
1-
1:mainbasic::hierarchical-example{version=0.1}
2-
1:main├┐basic::hierarchical-example{version=0.1}
3-
1:main│└┐basic::server{host="localhost", port=8080}
1+
1:mainbasic::hierarchical-example version=0.1
2+
1:main├┐basic::hierarchical-example version=0.1
3+
1:main│└┐basic::server host="localhost", port=8080
44
1:main│ ├─ms INFO basic starting
55
1:main│ ├─ms INFO basic listening
6-
1:main│ ├┐basic::server{host="localhost", port=8080}
7-
1:main│ │└┐basic::conn{peer_addr="82.9.9.9", port=42381}
6+
1:main│ ├┐basic::server host="localhost", port=8080
7+
1:main│ │└┐basic::conn peer_addr="82.9.9.9", port=42381
88
1:main│ │ ├─ms DEBUG basic connected
99
1:main│ │ ├─ms DEBUG basic message received, length=2
10-
1:main│ │┌┘basic::conn{peer_addr="82.9.9.9", port=42381}
11-
1:main│ ├┘basic::server{host="localhost", port=8080}
12-
1:main│ ├┐basic::server{host="localhost", port=8080}
13-
1:main│ │└┐basic::conn{peer_addr="8.8.8.8", port=18230}
10+
1:main│ │┌┘basic::conn peer_addr="82.9.9.9", port=42381
11+
1:main│ ├┘basic::server host="localhost", port=8080
12+
1:main│ ├┐basic::server host="localhost", port=8080
13+
1:main│ │└┐basic::conn peer_addr="8.8.8.8", port=18230
1414
1:main│ │ ├─ms DEBUG basic connected
15-
1:main│ │┌┘basic::conn{peer_addr="8.8.8.8", port=18230}
16-
1:main│ ├┘basic::server{host="localhost", port=8080}
17-
1:main│ ├┐basic::server{host="localhost", port=8080}
18-
1:main│ │└┐basic::conn{peer_addr="82.9.9.9", port=42381}
15+
1:main│ │┌┘basic::conn peer_addr="8.8.8.8", port=18230
16+
1:main│ ├┘basic::server host="localhost", port=8080
17+
1:main│ ├┐basic::server host="localhost", port=8080
18+
1:main│ │└┐basic::foomp 42 <- format string, normal_var=43
19+
1:main│ │ ├─ms ERROR basic hello
20+
1:main│ │┌┘basic::foomp 42 <- format string, normal_var=43
21+
1:main│ ├┘basic::server host="localhost", port=8080
22+
1:main│ ├┐basic::server host="localhost", port=8080
23+
1:main│ │└┐basic::conn peer_addr="82.9.9.9", port=42381
1924
1:main│ │ ├─ms WARN basic weak encryption requested, algo="xor"
2025
1:main│ │ ├─ms DEBUG basic response sent, length=8
2126
1:main│ │ ├─ms DEBUG basic disconnected
22-
1:main│ │┌┘basic::conn{peer_addr="82.9.9.9", port=42381}
23-
1:main│ ├┘basic::server{host="localhost", port=8080}
24-
1:main│ ├┐basic::server{host="localhost", port=8080}
25-
1:main│ │└┐basic::conn{peer_addr="8.8.8.8", port=18230}
27+
1:main│ │┌┘basic::conn peer_addr="82.9.9.9", port=42381
28+
1:main│ ├┘basic::server host="localhost", port=8080
29+
1:main│ ├┐basic::server host="localhost", port=8080
30+
1:main│ │└┐basic::conn peer_addr="8.8.8.8", port=18230
2631
1:main│ │ ├─ms DEBUG basic message received, length=5
2732
1:main│ │ ├─ms DEBUG basic response sent, length=8
2833
1:main│ │ ├─ms DEBUG basic disconnected
29-
1:main│ │┌┘basic::conn{peer_addr="8.8.8.8", port=18230}
30-
1:main│ ├┘basic::server{host="localhost", port=8080}
34+
1:main│ │┌┘basic::conn peer_addr="8.8.8.8", port=18230
35+
1:main│ ├┘basic::server host="localhost", port=8080
3136
1:main│ ├─ms WARN basic internal error
3237
1:main│ ├─ms INFO basic exit
33-
1:main│┌┘basic::server{host="localhost", port=8080}
34-
1:main├┘basic::hierarchical-example{version=0.1}
35-
1:mainbasic::hierarchical-example{version=0.1}
38+
1:main│┌┘basic::server host="localhost", port=8080
39+
1:main├┘basic::hierarchical-example version=0.1
40+
1:mainbasic::hierarchical-example version=0.1

examples/stderr.rs

+1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ fn main() {
2929
let layer = HierarchicalLayer::default()
3030
.with_indent_lines(true)
3131
.with_indent_amount(2)
32+
.with_bracketed_fields(true)
3233
.with_writer(std::io::stderr);
3334

3435
let subscriber = Registry::default().with(layer);

examples/wraparound.stdout

+43-43
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,67 @@
1-
1:mainwraparound::recurse{i=0}
1+
1:mainwraparound::recurse i=0
22
1:main├─ms WARN wraparound boop
3-
1:main├┐wraparound::recurse{i=0}
4-
1:main│└┐wraparound::recurse{i=1}
3+
1:main├┐wraparound::recurse i=0
4+
1:main│└┐wraparound::recurse i=1
55
1:main│ ├─ms WARN wraparound boop
6-
1:main│ ├┐wraparound::recurse{i=1}
7-
1:main│ │└┐wraparound::recurse{i=2}
6+
1:main│ ├┐wraparound::recurse i=1
7+
1:main│ │└┐wraparound::recurse i=2
88
1:main│ │ ├─ms WARN wraparound boop
9-
1:main│ │ ├┐wraparound::recurse{i=2}
10-
1:main│ │ │└┐wraparound::recurse{i=3}
9+
1:main│ │ ├┐wraparound::recurse i=2
10+
1:main│ │ │└┐wraparound::recurse i=3
1111
1:main│ │ │ ├─ms WARN wraparound boop
12-
1:mainwraparound::recurse{i=3}
13-
1:mainwraparound::recurse{i=4}
12+
1:mainwraparound::recurse i=3
13+
1:mainwraparound::recurse i=4
1414
1:mainms WARN wraparound boop
15-
1:mainwraparound::recurse{i=4}
16-
1:mainwraparound::recurse{i=5}
15+
1:mainwraparound::recurse i=4
16+
1:mainwraparound::recurse i=5
1717
1:main├─ms WARN wraparound boop
18-
1:main├┐wraparound::recurse{i=5}
19-
1:main│└┐wraparound::recurse{i=6}
18+
1:main├┐wraparound::recurse i=5
19+
1:main│└┐wraparound::recurse i=6
2020
1:main│ ├─ms WARN wraparound boop
21-
1:main│ ├┐wraparound::recurse{i=6}
22-
1:main│ │└┐wraparound::recurse{i=7}
21+
1:main│ ├┐wraparound::recurse i=6
22+
1:main│ │└┐wraparound::recurse i=7
2323
1:main│ │ ├─ms WARN wraparound boop
24-
1:main│ │ ├┐wraparound::recurse{i=7}
25-
1:main│ │ │└┐wraparound::recurse{i=8}
24+
1:main│ │ ├┐wraparound::recurse i=7
25+
1:main│ │ │└┐wraparound::recurse i=8
2626
1:main│ │ │ ├─ms WARN wraparound boop
27-
1:mainwraparound::recurse{i=8}
28-
1:mainwraparound::recurse{i=9}
27+
1:mainwraparound::recurse i=8
28+
1:mainwraparound::recurse i=9
2929
1:mainms WARN wraparound boop
30-
1:mainwraparound::recurse{i=9}
31-
1:mainwraparound::recurse{i=10}
30+
1:mainwraparound::recurse i=9
31+
1:mainwraparound::recurse i=10
3232
1:main├─ms WARN wraparound boop
33-
1:main├┐wraparound::recurse{i=10}
34-
1:main│└┐wraparound::recurse{i=11}
33+
1:main├┐wraparound::recurse i=10
34+
1:main│└┐wraparound::recurse i=11
3535
1:main│ ├─ms WARN wraparound boop
36-
1:main│ ├┐wraparound::recurse{i=11}
37-
1:main│ │└┐wraparound::recurse{i=12}
36+
1:main│ ├┐wraparound::recurse i=11
37+
1:main│ │└┐wraparound::recurse i=12
3838
1:main│ │ ├─ms WARN wraparound boop
39-
1:main│ │ ├┐wraparound::recurse{i=12}
40-
1:main│ │ │└┐wraparound::recurse{i=13}
39+
1:main│ │ ├┐wraparound::recurse i=12
40+
1:main│ │ │└┐wraparound::recurse i=13
4141
1:main│ │ │ ├─ms WARN wraparound boop
42-
1:mainwraparound::recurse{i=13}
43-
1:mainwraparound::recurse{i=14}
42+
1:mainwraparound::recurse i=13
43+
1:mainwraparound::recurse i=14
4444
1:mainms WARN wraparound boop
45-
1:mainwraparound::recurse{i=14}
46-
1:mainwraparound::recurse{i=15}
45+
1:mainwraparound::recurse i=14
46+
1:mainwraparound::recurse i=15
4747
1:main├─ms WARN wraparound boop
48-
1:main├┐wraparound::recurse{i=15}
49-
1:main│└┐wraparound::recurse{i=16}
48+
1:main├┐wraparound::recurse i=15
49+
1:main│└┐wraparound::recurse i=16
5050
1:main│ ├─ms WARN wraparound boop
51-
1:main│ ├┐wraparound::recurse{i=16}
52-
1:main│ │└┐wraparound::recurse{i=17}
51+
1:main│ ├┐wraparound::recurse i=16
52+
1:main│ │└┐wraparound::recurse i=17
5353
1:main│ │ ├─ms WARN wraparound boop
54-
1:main│ │ ├┐wraparound::recurse{i=17}
55-
1:main│ │ │└┐wraparound::recurse{i=18}
54+
1:main│ │ ├┐wraparound::recurse i=17
55+
1:main│ │ │└┐wraparound::recurse i=18
5656
1:main│ │ │ ├─ms WARN wraparound boop
57-
1:mainwraparound::recurse{i=18}
58-
1:mainwraparound::recurse{i=19}
57+
1:mainwraparound::recurse i=18
58+
1:mainwraparound::recurse i=19
5959
1:mainms WARN wraparound boop
60-
1:mainwraparound::recurse{i=19}
61-
1:mainwraparound::recurse{i=20}
60+
1:mainwraparound::recurse i=19
61+
1:mainwraparound::recurse i=20
6262
1:main├─ms WARN wraparound boop
63-
1:main├┐wraparound::recurse{i=20}
64-
1:main│└┐wraparound::recurse{i=21}
63+
1:main├┐wraparound::recurse i=20
64+
1:main│└┐wraparound::recurse i=21
6565
1:main│ ├─ms WARN wraparound boop
6666
1:main│ ├─ms WARN wraparound bop
6767
1:main├─ms WARN wraparound bop

src/format.rs

+10
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ pub struct Config {
4242
pub verbose_entry: bool,
4343
/// Whether to print the current span before exiting it.
4444
pub verbose_exit: bool,
45+
/// Whether to print squiggly brackets (`{}`) around the list of fields in a span.
46+
pub bracketed_fields: bool,
4547
}
4648

4749
impl Config {
@@ -92,6 +94,13 @@ impl Config {
9294
}
9395
}
9496

97+
pub fn with_bracketed_fields(self, bracketed_fields: bool) -> Self {
98+
Self {
99+
bracketed_fields,
100+
..self
101+
}
102+
}
103+
95104
pub(crate) fn prefix(&self) -> String {
96105
let mut buf = String::new();
97106
if self.render_thread_ids {
@@ -127,6 +136,7 @@ impl Default for Config {
127136
wraparound: usize::max_value(),
128137
verbose_entry: false,
129138
verbose_exit: false,
139+
bracketed_fields: false,
130140
}
131141
}
132142
}

src/lib.rs

+36-23
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,15 @@ where
169169
}
170170
}
171171

172+
/// Whether to print `{}` around the fields when printing a span.
173+
/// This can help visually distinguish fields from the rest of the message.
174+
pub fn with_bracketed_fields(self, bracketed_fields: bool) -> Self {
175+
Self {
176+
config: self.config.with_bracketed_fields(bracketed_fields),
177+
..self
178+
}
179+
}
180+
172181
fn styled(&self, style: Style, text: impl AsRef<str>) -> String {
173182
if self.config.ansi {
174183
style.paint(text.as_ref()).to_string()
@@ -177,23 +186,21 @@ where
177186
}
178187
}
179188

180-
fn print_kvs<'a, I, K, V>(
181-
&self,
182-
buf: &mut impl fmt::Write,
183-
kvs: I,
184-
leading: &str,
185-
) -> fmt::Result
189+
fn print_kvs<'a, I, V>(&self, buf: &mut impl fmt::Write, kvs: I) -> fmt::Result
186190
where
187-
I: IntoIterator<Item = (K, V)>,
188-
K: AsRef<str> + 'a,
191+
I: IntoIterator<Item = (&'a str, V)>,
189192
V: fmt::Display + 'a,
190193
{
191194
let mut kvs = kvs.into_iter();
192195
if let Some((k, v)) = kvs.next() {
193-
write!(buf, "{}{}={}", leading, k.as_ref(), v)?;
196+
if k == "message" {
197+
write!(buf, "{}", v)?;
198+
} else {
199+
write!(buf, "{}={}", k, v)?;
200+
}
194201
}
195202
for (k, v) in kvs {
196-
write!(buf, ", {}={}", k.as_ref(), v)?;
203+
write!(buf, ", {}={}", k, v)?;
197204
}
198205
Ok(())
199206
}
@@ -238,20 +245,26 @@ where
238245
name = self.styled(Style::new().fg(Color::Green).bold(), span.metadata().name())
239246
)
240247
.unwrap();
241-
write!(
242-
current_buf,
243-
"{}",
244-
self.styled(Style::new().fg(Color::Green).bold(), "{") // Style::new().fg(Color::Green).dimmed().paint("{")
245-
)
246-
.unwrap();
247-
self.print_kvs(&mut current_buf, data.kvs.iter().map(|(k, v)| (k, v)), "")
248+
if self.config.bracketed_fields {
249+
write!(
250+
current_buf,
251+
"{}",
252+
self.styled(Style::new().fg(Color::Green).bold(), "{") // Style::new().fg(Color::Green).dimmed().paint("{")
253+
)
248254
.unwrap();
249-
write!(
250-
current_buf,
251-
"{}",
252-
self.styled(Style::new().fg(Color::Green).bold(), "}") // Style::new().dimmed().paint("}")
253-
)
254-
.unwrap();
255+
} else {
256+
write!(current_buf, " ").unwrap();
257+
}
258+
self.print_kvs(&mut current_buf, data.kvs.iter().map(|(k, v)| (*k, v)))
259+
.unwrap();
260+
if self.config.bracketed_fields {
261+
write!(
262+
current_buf,
263+
"{}",
264+
self.styled(Style::new().fg(Color::Green).bold(), "}") // Style::new().dimmed().paint("}")
265+
)
266+
.unwrap();
267+
}
255268

256269
bufs.indent_current(indent, &self.config, style);
257270
let writer = self.make_writer.make_writer();

0 commit comments

Comments
 (0)