Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mengalihkan Output Perintah ke Log Masuk Masa Nyata di Golang?

Bagaimana untuk Mengalihkan Output Perintah ke Log Masuk Masa Nyata di Golang?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-12 13:38:02590semak imbas

How to Redirect Command Output to a Log in Real-Time in Golang?

Mengubah hala Output Perintah untuk Log Masuk Golang

Apabila melaksanakan arahan menggunakan fungsi exec.Command, selalunya wajar untuk mengubah hala keluaran ke log secara nyata- pemantauan masa. Walaupun CombinedOutput boleh menangkap keseluruhan output sebaik sahaja arahan selesai, ia tidak sesuai untuk proses yang berjalan lama atau belum selesai.

Penyelesaian biasa untuk pengalihan keluaran masa nyata adalah dengan menetapkan secara terus stdout dan stderr kepada aliran keluaran sistem (os.Stdout dan os.Stderr). Walau bagaimanapun, ini mungkin tidak praktikal untuk aplikasi yang tidak menulis ke terminal.

Penyelesaian Menggunakan Paip

Untuk mengubah hala output arahan ke log, anda boleh menggunakan paip . Berikut ialah contoh:

stdout, err := cmd.StdoutPipe()
if err != nil {
    return nil, err
}

// Start the command with the pipe in place
if err := cmd.Start(); err != nil {
    return nil, err
}

// Real-time monitoring of stdout
in := bufio.NewScanner(stdout)

for in.Scan() {
    log.Printf(in.Text()) // Write line to log or perform other operations
}
if err := in.Err(); err != nil {
    log.Printf("Error: %s", err)
}

Pertimbangan

Kaedah ini mengendalikan stdout, tetapi anda juga boleh mengurus stderr dengan mencipta paip dan goroutine yang berasingan. Selain itu, anda mungkin perlu mengendalikan pembatalan konteks atau kes kelebihan lain untuk memastikan pembersihan dan pengurusan sumber yang betul.

Atas ialah kandungan terperinci Bagaimana untuk Mengalihkan Output Perintah ke Log Masuk Masa Nyata di Golang?. 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