首頁 >後端開發 >Golang >如何在保持順序的同時將命令輸出重新導向到控制台和日誌檔案?

如何在保持順序的同時將命令輸出重新導向到控制台和日誌檔案?

DDD
DDD原創
2024-11-04 03:42:01192瀏覽

How to Redirect Command Output to Both Console and Log File while Maintaining Order?

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

要同時顯示和記錄命令的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()
    mwriter := io.MultiWriter(f, os.Stdout)
    cmd := exec.Command("ls")
    cmd.Stderr = mwriter
    cmd.Stdout = mwriter
    err = cmd.Run() //blocks until sub process is complete
    if err != nil {
        panic(err)
    }
}</code>

說明

  1. 開啟一個檔案進行日誌記錄並建立一個結合該檔案和標準輸出的MultiWriter。
  2. 建立一個指令,並指定 stdout 和 stderr 都應使用 MultiWriter。
  3. 執行該命令,這會將輸出即時列印到控制台和日誌文件,同時保持原始輸出順序.

以上是如何在保持順序的同時將命令輸出重新導向到控制台和日誌檔案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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