実行出力を Go のログインにコピーする
Go で、長時間実行または終了していないプロセスの出力をログにリダイレクトする挑戦的になる可能性があります。プロセスが完了するのを待つことで単純な出力キャプチャが可能になりますが、非ターミナル環境でのリアルタイム ロギングには別のアプローチが必要です。
解決策の 1 つは、プロセスの標準出力をバッファされたスキャナーに接続するパイプを作成することです。
stdout, err := cmd.StdoutPipe() if err != nil { return 0, err } // start the command after having set up the pipe if err := cmd.Start(); err != nil { return 0, err } // read command's stdout line by line in := bufio.NewScanner(stdout) for in.Scan() { log.Printf(in.Text()) // write each line to your log, or anything you need } if err := in.Err(); err != nil { log.Printf("error: %s", err) }
このコードは、stdout パイプを作成し、コマンドを開始し、スキャナーを使用して出力を 1 行ずつ読み取ります。その後、必要に応じて各行をログに記録したり、処理したりできます。この方法で Stdout を処理すると、プロセスの実行中にプロセスの出力をログにリダイレクトでき、サービスの重要な情報をタイムリーにログに記録できます。
以上が実行出力を Go のログインにリダイレクトするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。