Go のロガーへの実行出力のリダイレクト
Go では、exec パッケージは外部コマンドを実行するためのメカニズムを提供します。 CombinedOutput メソッドはコマンドの終了後に出力全体をキャプチャできますが、長時間実行されているプロセスや未完了のプロセスには適していない可能性があります。
コマンドの出力をリアルタイムでロガーにリダイレクトするには、柔軟な対応が求められます。 1 つの手法では、パイプを使用してコマンドの出力をロガーに接続します。
コード スニペットの例を次に示します。
import ( "bufio" "log" "os/exec" ) func main() { cmd := exec.Command("yes") // Create a pipe to connect the command's stdout to the logger stdout, err := cmd.StdoutPipe() if err != nil { log.Fatalf("Failed to create stdout pipe: %v", err) } // Start the command if err := cmd.Start(); err != nil { log.Fatalf("Failed to start command: %v", err) } // Create a buffered reader to read the output line by line in := bufio.NewScanner(stdout) // Read the output and log it in real-time for in.Scan() { log.Printf(in.Text()) } if err := in.Err(); err != nil { log.Printf("Error reading command output: %v", err) } }
この例では、Stderr ストリームは、別のゴルーチン。コマンドの出力をロガーにパイプすることで、開発者はそのリアルタイム出力をキャプチャしてログに記録できるため、アプリケーション内のプロセスの監視とトラブルシューティングが容易になります。
以上がGoで実行出力をリアルタイムでロガーにリダイレクトする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。