Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Saya Menulis Output Perintah ke Konsol dan Fail Log serentak?

Bagaimanakah Saya Menulis Output Perintah ke Konsol dan Fail Log serentak?

Patricia Arquette
Patricia Arquetteasal
2024-11-04 05:19:29981semak imbas

How Do I Simultaneously Write Command Output to Console and Log File?

Menulis Output Perintah ke Konsol dan Fail Log Secara Serentak

Anda mahu mengubah hala output daripada arahan ke konsol dan fail log. Kod sedia ada menghantar output ke konsol, tetapi tidak mencatatkannya. Untuk mengubah hala kedua-dua strim, gunakan teknik yang diterangkan di bawah.

Untuk mencapai matlamat anda, pertimbangkan pendekatan berikut:

Ubah hala Stdout dan Stderr kepada MultiWriter

Buat MultiWriter yang menggabungkan fail dan output standard. Kemudian, sebelum menjalankan arahan, tetapkan MultiWriter ini kepada strim Stdout dan Stderr arahan.

Contoh Kod

<code class="go">package main

import (
    "io"
    "log"
    "os"
    "os/exec"
)

func main() {
    // Open the log file for writing
    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()

    // Create a MultiWriter that combines the log file and standard output
    mwriter := io.MultiWriter(f, os.Stdout)

    // Construct the command
    cmd := exec.Command("ls")

    // Redirect Stdout and Stderr to the MultiWriter
    cmd.Stdout = mwriter
    cmd.Stderr = mwriter

    // Run the command
    err = cmd.Run()
    if err != nil {
        panic(err)
    }
}</code>

Kod ini membuka fail log, mencipta MultiWriter, menetapkan strim arahan kepada MultiWriter, dan menjalankan arahan. Output akan diubah hala ke konsol dan fail log dalam masa nyata dan dalam susunan yang betul.

Atas ialah kandungan terperinci Bagaimanakah Saya Menulis Output Perintah ke Konsol dan Fail Log serentak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn