>백엔드 개발 >Golang >Go에서 명령 출력을 콘솔과 로그 파일로 동시에 리디렉션하는 방법은 무엇입니까?

Go에서 명령 출력을 콘솔과 로그 파일로 동시에 리디렉션하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-03 22:07:301042검색

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으로 문의하세요.