首頁  >  文章  >  後端開發  >  如何在 Go 中將命令輸出同時重定向到控制台和日誌檔案?

如何在 Go 中將命令輸出同時重定向到控制台和日誌檔案?

Susan Sarandon
Susan Sarandon原創
2024-11-03 22:07:30985瀏覽

How to Redirect Command Output to Console and Log File Simultaneously in Go?

同時將命令輸出重新導向到控制台和日誌檔案

將命令的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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn