Golang のログへのプロセス出力のリダイレクト
Golang で外部プロセスを実行する場合、その出力を即座にキャプチャしてログに記録することが重要な場合があります。プロセスが終了するのを待って CombinedOutput() を使用するとログを記録できますが、長時間実行されているプロセスや未完了のプロセスの場合は現実的ではありません。
あるいは、Stdout に出力しないサービスでは、リアルタイムでの Stdout への書き込みは不十分です。端末。解決策の 1 つは、パイプを活用して出力を効率的にリダイレクトすることです。
リダイレクトにパイプを利用する
パイプはプロセス間の接続を作成し、データ転送を可能にします。プロセス出力をログにリダイレクトするには、次の手順に従います。
Stderr のハンドラーの追加は、両方の出力チャネルを同時に処理するゴルーチンを作成することで実現できます。 .
実装例:
出力リダイレクトにパイプを使用する次のコード スニペットを考えてみましょう:
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 中国語 Web サイトの他の関連記事を参照してください。