同時將命令輸出重新導向到控制台和日誌檔案
將命令的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中文網其他相關文章!