我想将stderr
重定向到文件AND stdout
。
我知道如何使用stderr
将dup2
重定向到档案:
err := syscall.Dup2(int(fatal_logfile.Fd()), int(os.Stderr.Fd()))
但是我不知道如何将这个时间重定向到stdout
。喜欢"复制"一个流源到两个不同的流。
只需注意,此功能在应用启动时调用,用于重定向stderr
,例如发生panic
时。然后我不能在这种情况下使用recover
(即使因为我运行了很多goroutines)。
任何人都知道如何解决这个问题?
另一个有效的解决方案是在调用二进制文件时使用pipes
和tee
,但是可以在应用程序中定义相同的行为/逻辑吗?我希望它以默认方式运行。
./app_bin 2> >(tee -a fatal.log)
答案 0 :(得分:0)
writer := io.MultiWriter(os.Stdout, os.Stderr)
无论写入writer
的是什么,都会写入os.Stdout
和os.Stderr
。