file - go - 将 stderr 重定向到文件和 stdout

标签 file go stream stdout stderr

我想将 stderr 重定向到一个文件并重定向到 stdout

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

但后来我不知道如何将其重定向到 stdout。就像将一个流源“复制”到两个不同的流。

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

有人知道如何解决这个问题吗?


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

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

最佳答案

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

无论写入writer 的内容都会写入os.Stdoutos.Stderr

关于file - go - 将 stderr 重定向到文件和 stdout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39773599/

相关文章:

python - 如何使用 python 从给定文件中提取行 block

Java - 提示用户输入文件的方法

for-loop - 在 for 循环中使用 AtoI 时出错

python - 在subprocess.Popen中,bufsize适用于哪个文件?

C#:从目录中获取 5 个最新(最后修改)的文件

c - 在 Linux 上用 C 流式传输音频文件

windows - 在 Windows 上安装 PacketBeat

json - 如何读取结构字段 ` ` 装饰器?

lambda - Java 8 Stream 每 100 行读取一次文件

java - 如何在java中通过UDP发送音频流?