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

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

Linda Hamilton
Linda Hamilton원래의
2024-11-04 07:42:02586검색

How to Redirect Command Output to Console and Log File Simultaneously in Real Time?

실시간으로 명령 출력을 콘솔과 로그 파일로 동시에 리디렉션하는 방법

제공된 코드는 명령의 stdout 및 stderr을 인쇄합니다. 콘솔에는 있지만 실시간으로 파일에 기록하는 기능이 부족합니다. 이 기사에서는 MultiWriter를 사용하여 다음 기준을 준수하면서 동시 로깅 및 콘솔 출력을 달성하는 솔루션을 제시합니다.

  • 콘솔에 대한 실시간 출력
  • 로그 파일에서 출력의 정확한 복제
  • 쓰기 순서 존중
  • 실행된 명령 수정 없음

스캐너, io.Copy 및 기타 기술을 사용한 이전 시도는 출력 순서를 유지하지 못했습니다. 고루틴 간의 잠재적인 경쟁 조건으로 인해 발생합니다.

해결책: MultiWriter 사용

이 솔루션은 여러 대상에 동시에 쓸 수 있는 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>

MultiWriter 인스턴스 mwriter는 로그 파일과 표준 출력을 결합합니다. 명령에 Stdout 및 Stderr를 지정할 때 mwriter를 사용하여 콘솔 출력과 로깅이 동시에 발생하는지 확인하세요.

위 내용은 실시간으로 명령 출력을 콘솔과 로그 파일로 동시에 리디렉션하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.