Skip to content

Commit 2947084

Browse files
committed
Fix pretty formatter thread id double space
1 parent 6dd9d23 commit 2947084

File tree

2 files changed

+62
-16
lines changed

2 files changed

+62
-16
lines changed

tracing-subscriber/src/fmt/format/mod.rs

Lines changed: 58 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1488,21 +1488,31 @@ pub(super) mod test {
14881488
.with_thread_names(false);
14891489
#[cfg(feature = "ansi")]
14901490
let subscriber = subscriber.with_ansi(false);
1491-
run_test(subscriber, make_writer, "hello\n")
1491+
assert_info_hello(subscriber, make_writer, "hello\n")
14921492
}
14931493

14941494
#[cfg(feature = "ansi")]
14951495
#[test]
14961496
fn with_ansi_true() {
14971497
let expected = "\u{1b}[2mfake time\u{1b}[0m \u{1b}[32m INFO\u{1b}[0m \u{1b}[2mtracing_subscriber::fmt::format::test\u{1b}[0m\u{1b}[2m:\u{1b}[0m hello\n";
1498-
test_ansi(true, expected);
1498+
assert_info_hello_ansi(true, expected);
14991499
}
15001500

15011501
#[cfg(feature = "ansi")]
15021502
#[test]
15031503
fn with_ansi_false() {
15041504
let expected = "fake time INFO tracing_subscriber::fmt::format::test: hello\n";
1505-
test_ansi(false, expected);
1505+
assert_info_hello_ansi(false, expected);
1506+
}
1507+
1508+
#[cfg(feature = "ansi")]
1509+
fn assert_info_hello_ansi(is_ansi: bool, expected: &str) {
1510+
let make_writer = MockMakeWriter::default();
1511+
let subscriber = crate::fmt::Collector::builder()
1512+
.with_writer(make_writer.clone())
1513+
.with_ansi(is_ansi)
1514+
.with_timer(MockTime);
1515+
assert_info_hello(subscriber, make_writer, expected)
15061516
}
15071517

15081518
#[cfg(not(feature = "ansi"))]
@@ -1513,7 +1523,7 @@ pub(super) mod test {
15131523
let subscriber = crate::fmt::Collector::builder()
15141524
.with_writer(make_writer)
15151525
.with_timer(MockTime);
1516-
run_test(subscriber, make_writer, expected);
1526+
assert_info_hello(subscriber, make_writer, expected);
15171527
}
15181528

15191529
#[test]
@@ -1526,23 +1536,60 @@ pub(super) mod test {
15261536
.with_timer(MockTime);
15271537
let expected = "fake time tracing_subscriber::fmt::format::test: hello\n";
15281538

1529-
run_test(subscriber, make_writer, expected);
1539+
assert_info_hello(subscriber, make_writer, expected);
15301540
}
15311541

1532-
#[cfg(feature = "ansi")]
1533-
fn test_ansi(is_ansi: bool, expected: &str) {
1542+
#[test]
1543+
fn with_thread_ids() {
15341544
let make_writer = MockMakeWriter::default();
15351545
let subscriber = crate::fmt::Collector::builder()
15361546
.with_writer(make_writer.clone())
1537-
.with_ansi(is_ansi)
1547+
.with_thread_ids(true)
1548+
.with_ansi(false)
1549+
.with_timer(MockTime);
1550+
let expected = "fake time INFO ThreadId() tracing_subscriber::fmt::format::test: hello\n";
1551+
1552+
assert_info_hello_ignore_numeric(subscriber, make_writer, expected);
1553+
}
1554+
1555+
#[test]
1556+
fn pretty_default() {
1557+
let make_writer = MockMakeWriter::default();
1558+
let subscriber = crate::fmt::Collector::builder()
1559+
.pretty()
1560+
.with_writer(make_writer.clone())
1561+
.with_ansi(false)
15381562
.with_timer(MockTime);
1539-
run_test(subscriber, make_writer, expected)
1563+
let expected = r#" fake time INFO tracing_subscriber::fmt::format::test: hello
1564+
at tracing-subscriber/src/fmt/format/mod.rs:
1565+
1566+
"#
1567+
.replace('/', &std::path::MAIN_SEPARATOR.to_string());
1568+
1569+
assert_info_hello_ignore_numeric(subscriber, make_writer, &expected)
15401570
}
15411571

1542-
fn run_test(subscriber: impl Into<Dispatch>, buf: MockMakeWriter, expected: &str) {
1572+
fn assert_info_hello(subscriber: impl Into<Dispatch>, buf: MockMakeWriter, expected: &str) {
15431573
let _default = set_default(&subscriber.into());
15441574
tracing::info!("hello");
1545-
assert_eq!(expected, buf.get_string())
1575+
let result = buf.get_string();
1576+
1577+
assert_eq!(expected, result)
1578+
}
1579+
1580+
// When numeric characters are used they often form a non-deterministic value as they usually represent things like a thread id or line number.
1581+
// This assert method should be used when non-deterministic numeric characters are present.
1582+
fn assert_info_hello_ignore_numeric(
1583+
subscriber: impl Into<Dispatch>,
1584+
buf: MockMakeWriter,
1585+
expected: &str,
1586+
) {
1587+
let _default = set_default(&subscriber.into());
1588+
tracing::info!("hello");
1589+
1590+
let result = buf.get_string().replace(char::is_numeric, "");
1591+
1592+
assert_eq!(expected, result)
15461593
}
15471594

15481595
#[test]

tracing-subscriber/src/fmt/format/pretty.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -174,13 +174,12 @@ where
174174
if let Some(name) = thread.name() {
175175
write!(writer, "{}", name)?;
176176
if self.display_thread_id {
177-
write!(writer, " ({:?})", thread.id())?;
177+
write!(writer, " ")?;
178178
}
179-
} else if !self.display_thread_id {
180-
write!(writer, " {:?}", thread.id())?;
181179
}
182-
} else if self.display_thread_id {
183-
write!(writer, " {:?}", thread.id())?;
180+
}
181+
if self.display_thread_id {
182+
write!(writer, "{:?}", thread.id())?;
184183
}
185184
writer.write_char('\n')?;
186185
}

0 commit comments

Comments
 (0)