我有一个程序可以自由使用println!
宏。事后看来,我可能应该使用日志记录箱,因为很多println!
语句只在开发环境中需要。
是否有一种简单的方法来“关闭” println!
(例如,使用环境变量)?我在需要保留的代码中使用了其他宏。
答案 0 :(得分:2)
我认为没有办法通过envvar禁用宏。
您可以做的是将println!
本身替换为macro_rules!基本上以环境意识重新实现它(例如,在写操作之上!)。
但我建议您只是硬着头皮,用更合适的东西代替。
答案 1 :(得分:1)
可以通过条件编译来完成:
macro_rules! println {
($($rest:tt)*) => {
#[cfg(debug_assertions)]
std::println!($($rest)*)
}
}
仅在启用debug_assertions
时打印。默认情况下,它们在调试版本中启用,在发行版本中禁用。另外,您可以使用可以单独切换的功能:
macro_rules! println {
($($rest:tt)*) => {
#[cfg(feature = "stdout")]
std::println!($($rest)*)
}
}
# Cargo.toml
[features]
stdout = []
如果需要环境变量,可以执行类似的操作
macro_rules! println {
($($rest:tt)*) => {
if std::env::var("DEBUG").is_ok() {
std::println!($($rest)*);
}
}
}
答案 2 :(得分:0)
您通常希望将所有调试/错误消息都通过stderr
转发到eprintln!
流,而不是通过stdout
转发到println!
,这用于程序的有用输出。
您可以从此处丢弃stderr
流:
在Windows中
a.exe 2> nul
在Linux中
./a 2> /dev/null