我想将stderr
重定向到文件并重定向到stdout
。
我知道如何使用dup2
重定向stderr
到文件:err := syscall.Dup2(int(fatal_logfile.Fd()), int(os.Stderr.Fd()))
但是我不知道如何将这个重定向到stdout
。就像"复制"一个流源到两个不同的流。
请注意,此功能在应用程序启动时调用,并用于在panic
发生时重定向stderr
。那么在这种情况下,我不能使用recover
(即使因为我运行了很多例程)。
谁知道怎么解决这个问题?
另一个工作的解决方案是使用pipes
和tee
时调用二进制,但有可能有相同的行为/逻辑内定义的应用程序?我希望它以这种方式作为默认运行。
./app_bin 2> >(tee -a fatal.log)
writer := io.MultiWriter(os.Stdout, os.Stderr)
写入writer
的内容将写入os.Stdout
和os.Stderr