我想将 stderr
重定向到一个文件并重定向到 stdout
。
我知道如何使用 dup2
将 stderr
重定向到文件:
err := syscall.Dup2(int(fatal_logfile.Fd()), int(os.Stderr.Fd()))
但后来我不知道如何将其重定向到 stdout
。就像将一个流源“复制”到两个不同的流。
请注意,此功能在应用程序启动时调用,并用于重定向 stderr
,例如在发生 panic
时。然后在这种情况下我不能使用 recover
(即使我运行了很多 goroutine)。
有人知道如何解决这个问题吗?
另一个可行的解决方案是在调用二进制文件时使用 pipes
和 tee
,但是否可以在应用程序内部定义相同的行为/逻辑?我希望它默认以这种方式运行。
./app_bin 2>>(tee -a fatal.log)
最佳答案
writer := io.MultiWriter(os.Stdout, os.Stderr)
无论写入writer
的内容都会写入os.Stdout
和os.Stderr
。
关于file - go - 将 stderr 重定向到文件和 stdout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39773599/