rust 如何在编译发行版时使用print!和Rocket?

gxwragnw  于 2023-04-06  发布在  其他
关注(0)|答案(2)|浏览(207)

我有一些包含print!()语句的路由处理程序。当我编译应用程序进行调试时,它们工作得很好。但是,当编译发布时,Rocket似乎“静音”了所有的print语句(以及来自log crate的日志功能)。它为什么这样做?我如何强制它打印东西然后构建发布?我怀疑它可能连接到日志级别,这在编译发布时会自动设置为critical,但是,我不太确定print!语句有什么级别以及如何更改日志记录级别。

e5nszbig

e5nszbig1#

您特别提到了print!(),它在写入后不会flush()stdout,因此它的输出通常会被静音。
正如您提到的,rocket在调试版本中将默认日志级别设置为normal,这将产生更多/任何日志,这反过来又会导致flush()和您的print!()-输出也被刷新。
使用println!()或手动flush()

rsl1atfo

rsl1atfo2#

我只是想在print之后添加一个如何flush的快速参考
在Rust中,默认情况下print!宏是缓冲的,这意味着输出可能不会立即可见。要刷新输出缓冲区并确保print!语句立即可见,可以使用std::io::stdout()函数并调用其flush()方法。

use std::io::{self, Write};

fn main() {
    print!("Hello, world!");
    io::stdout().flush().unwrap(); // flushes the output buffer
}

相关问题