一直以来日志都是输出到 stdout 流的,不过最近看了一些项目好像都是输出到 stderr ,搞不太懂为什么要这么做,有大佬来讲一下两个的区别吗?
1
ysc3839 2022-04-19 07:47:34 +08:00 via Android
分开两个可以实现 stdout 输出数据,stderr 输出错误信息,互不干扰。
一些语言提供的 IO 库封装有缓冲功能,可能会对 stdout 和 stderr 使用不同的缓冲设置 |
2
iqfEmhuNidBhDfWo 2022-04-19 07:47:48 +08:00 1
因为你可能需要将 stdout 通过管道传递给下一个进程,而 stderr 此时就可以拿来显示命令执行状态 /日志
|
3
YogiLiu 2022-04-19 07:52:40 +08:00 via Android 1
|
4
Codeword 2022-04-19 08:02:47 +08:00 1
日志输出到 stderr 更符合 POSIX 规范: https://pubs.opengroup.org/onlinepubs/9699919799/functions/stderr.html
其它区别:( C++中) stdout 是行缓冲的,既能往屏幕输出也能重定向到其它目标(如文件),stderr 是无缓冲的,不能被重定向。 如果 log 和正常输出混在一块,将来传递信息给其它进程的时候可能要费力气再去分离。 |
5
mekingname 2022-04-19 10:33:33 +08:00
正好我之前写过一篇文章说到这个东西的具体应用场景: https://mp.weixin.qq.com/s/Yzd2YoXNBaHQYivmeHZb_Q
|