ホームページ  >  記事  >  バックエンド開発  >  コマンド出力のログとコンソールへの出力を同時に行うにはどうすればよいですか?

コマンド出力のログとコンソールへの出力を同時に行うにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-04 01:12:02471ブラウズ

How to Simultaneously Log and Print Command Output to Console?

コマンド Stdout および Stderr のコンソールとログの同時出力

提供されたコードの目的は、コマンド stdout および stderr をコンソールに出力することです。コマンド自体を変更することなく、リアルタイムで同時にコンソールの順序でファイルにログを記録します。

これを実現するには、io.MultiWriter タイプを利用できます。その方法は次のとおりです。

<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()

    // Define a MultiWriter that includes both the log file and stdout
    multiWriter := io.MultiWriter(f, os.Stdout)

    // Set stdout and stderr of the command to the MultiWriter
    cmd := exec.Command("php", "randomcommand.php")
    cmd.Stdout = multiWriter
    cmd.Stderr = multiWriter

    if err := cmd.Run(); err != nil {
        log.Fatal(err)
    }
}</code>

ログ ファイルと標準出力の組み合わせとして multiWriter を定義することで、コマンド出力を両方の宛先に同時に書き込むことができます。 cmd.Run() はコマンドが完了するまでブロックし、出力順序が維持されるようにします。

このソリューションはすべての要件を満たします。

  • stdout と stderr をリアルタイムでコンソールに出力します。
  • コンソール出力をミラーリングして、stdout と stderr をファイルに記録します。
  • stdout と stderr への書き込みの正確な順序を尊重します。
  • コマンド自体は変更しません。

以上がコマンド出力のログとコンソールへの出力を同時に行うにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。