go - 将stderr重定向到文件AND到stdout

时间:2016-09-29 14:53:12

标签: file go stream stdout stderr

我想将stderr重定向到文件AND stdout

我知道如何使用stderrdup2重定向到档案:
err := syscall.Dup2(int(fatal_logfile.Fd()), int(os.Stderr.Fd()))

但是我不知道如何将这个时间重定向到stdout。喜欢"复制"一个流源到两个不同的流。

只需注意,此功能在应用启动时调用,用于重定向stderr,例如发生panic时。然后我不能在这种情况下使用recover(即使因为我运行了很多goroutines)。

任何人都知道如何解决这个问题?

另一个有效的解决方案是在调用二进制文件时使用pipestee,但是可以在应用程序中定义相同的行为/逻辑吗?我希望它以默认方式运行。

./app_bin 2> >(tee -a fatal.log)

1 个答案:

答案 0 :(得分:0)

writer := io.MultiWriter(os.Stdout, os.Stderr)

无论写入writer的是什么,都会写入os.Stdoutos.Stderr