Thorkil Værge
Thorkil Værge

Reputation: 3767

How to print tracing output in tests?

My application is using the tracing Rust crate to create log output. How do I print these log messages when I'm running my tests?

Upvotes: 10

Views: 9726

Answers (3)

LeChatP
LeChatP

Reputation: 63

You can use the test-log crate. It works by overriding the #[test] attribute macro, allowing you to include tracing logs seamlessly into your test runs. This means you can see the log output without the need to modify each individual test. Unlike some alternative crates, which may require adding extra lines of code to each test, which is equivalent to calling a self-defined singleton for the tracing init in each test.

Upvotes: 3

Thorkil Værge
Thorkil Værge

Reputation: 3767

You can use the tracing_test Rust crate for this. It works like this:

#[traced_test]
#[test]
fn plain_old_test() {
   ...
}

All you have to do is add the tracing_test to your list of dependencies and decorate your tests with the #[traced_test] macro.

This also works with tokio_macros tests, that are decorated with #[tokio::test].

Then, as @Yuri mentions, you need to run the tests with the --nocapture argument: cargo t --nocapture. This is only relevant if the test succeeds.

Upvotes: 7

Yury
Yury

Reputation: 20936

Usually, if you need to print the output inside the tests you use --nocapture flag with the cargo test command:

$ cargo test -- --nocapture

Can you test if it works in your case?

Upvotes: 4

Related Questions