我有一些包含print!()语句的路由处理程序。当我编译应用程序进行调试时,它们工作得很好。但是,当编译发布时,Rocket似乎“静音”了所有的print语句(以及来自log crate的日志功能)。它为什么这样做?我如何强制它打印东西然后构建发布?我怀疑它可能连接到日志级别,这在编译发布时会自动设置为critical,但是,我不太确定print!语句有什么级别以及如何更改日志记录级别。
print!()
log
print!
e5nszbig1#
您特别提到了print!(),它在写入后不会flush()stdout,因此它的输出通常会被静音。正如您提到的,rocket在调试版本中将默认日志级别设置为normal,这将产生更多/任何日志,这反过来又会导致flush()和您的print!()-输出也被刷新。使用println!()或手动flush()。
flush()
stdout
rocket
normal
println!()
rsl1atfo2#
我只是想在print之后添加一个如何flush的快速参考在Rust中,默认情况下print!宏是缓冲的,这意味着输出可能不会立即可见。要刷新输出缓冲区并确保print!语句立即可见,可以使用std::io::stdout()函数并调用其flush()方法。
print
flush
std::io::stdout()
use std::io::{self, Write}; fn main() { print!("Hello, world!"); io::stdout().flush().unwrap(); // flushes the output buffer }
2条答案
按热度按时间e5nszbig1#
您特别提到了
print!()
,它在写入后不会flush()
stdout
,因此它的输出通常会被静音。正如您提到的,
rocket
在调试版本中将默认日志级别设置为normal
,这将产生更多/任何日志,这反过来又会导致flush()
和您的print!()
-输出也被刷新。使用
println!()
或手动flush()
。rsl1atfo2#
我只是想在
print
之后添加一个如何flush
的快速参考在Rust中,默认情况下
print!
宏是缓冲的,这意味着输出可能不会立即可见。要刷新输出缓冲区并确保print!
语句立即可见,可以使用std::io::stdout()
函数并调用其flush()
方法。