コマンド出力をコンソールとログ ファイルに同時にリダイレクトする
コマンドの stdout と stderr をコンソールとログ ファイルの両方にリダイレクトするにはリアルタイムでは、Go で io.MultiWriter 型を使用できます。その方法は次のとおりです。
提供されたコード スニペットでは、cmd の Stdout フィールドと Stderr フィールドがそれぞれ os.Stdout と os.Stderr に設定されているため、コードはコンソールにのみリダイレクトされます。コンソールとログ ファイルの両方にリダイレクトするには、コードを次のように変更します。
<code class="go">package main import ( "io" "log" "os" "os/exec" ) func main() { // Logging capability f, err := os.OpenFile("log.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666) if err != nil { log.Fatalf("Error opening file: %v", err) } defer f.Close() mwriter := io.MultiWriter(f, os.Stdout) cmd := exec.Command("php", "randomcommand.php") cmd.Stdout = mwriter cmd.Stderr = mwriter if err := cmd.Run(); err != nil { log.Fatal(err) } }</code>
mwriter 変数は、ログ ファイルと標準出力の両方を含む io.MultiWriter のインスタンスです。コマンドの Stdout と Stderr をこの mwriter に設定すると、コマンドの出力が両方の場所に同時に書き込まれます。
randomcommand.php スクリプトは同じままで、stdout と stderr への書き込みを 20 回交互に繰り返すことができます。 Go プログラムを実行すると、出力はリアルタイムでコンソールに出力され、指定されたログ ファイルにも記録され、stdout と stderr への書き込みの正確な順序が維持されます。
以上がGo でコマンド出力をコンソールとログ ファイルに同時にリダイレクトするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。