将进程输出重定向到 Golang 中的日志
在 Golang 中执行外部进程时,及时捕获并记录其输出可能很有价值。在等待进程完成并使用 CombinedOutput() 允许进行日志记录时,对于长时间运行或未完成的进程来说是不切实际的。
或者,实时写入 Stdout 对于不输出到的服务来说是不够的一个终端。一种解决方案是利用管道进行有效的输出重定向。
利用管道进行重定向
管道在进程之间创建连接,从而实现数据传输。要将进程输出重定向到日志,请按照下列步骤操作:
为 Stderr 添加处理程序可以通过创建一个同时处理两个输出通道的 goroutine 来实现.
示例实现:
考虑以下使用管道进行输出重定向的代码片段:
stdout, err := cmd.StdoutPipe() if err != nil { return 0, err } if err := cmd.Start(); err != nil { return 0, err } in := bufio.NewScanner(stdout) for in.Scan() { log.Printf(in.Text()) } if err := in.Err(); err != nil { log.Printf("error: %s", err) }
通过采用这种方法,您可以有效地及时捕获并记录外部进程的输出,确保有价值的信息可用于调试和分析。
以上是Golang中如何实时重定向外部进程输出到日志?的详细内容。更多信息请关注PHP中文网其他相关文章!