在linux写代码,经常用的比较多的是log库:
use log::{error, info, warn};
如果将log输出到 mylog.txt中:
cargo run --relase 2>&1 | tee mylog.txt
为什么有一个奇怪的“2 >&1”?如果没有,你会在mylog.txt打开后,看到什么?
"2>&1"的含义:
0 stdin,1 stdout,2 stderr
2>&1应该分成两个部分来看,一个是2>以及另一个是&1,
其中2>就是将标准出错重定向到某个特定的地方;&1是指无论标准输出在哪里。
所以2>&1的意思就是说无论标准出错在哪里(哪怕是没有?),都将标准出错重定向到标准输出中。
翻译一下,人话:
就是把错误的也当正常一样输出。
其它:
IO重定向:
输出重定向:>
特性:覆盖输出
输出重定向:>>
特性:追加输出
禁止覆盖输出重定向至已存在的文件;
此时可使用强制覆盖输出:>|
错误输出流重定向:2>, 2>> 只会将错误的信息输出到指定的地方
合并正常输出流和错误输出流:
(1) &>, &>>
(2) COMMAND > /path/to/somefile 2>&1
COMMAND >> /path/to/somefile 2>&1
当然,也有重定向输入 <.