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

Golang에서 실시간으로 명령 출력을 로그로 리디렉션하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-11-12 13:38:02
원래의
704명이 탐색했습니다.

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

명령 출력을 Golang의 로그인으로 리디렉션

exec.Command 함수를 사용하여 명령을 실행할 때 실제 실행을 위해 출력을 로그로 리디렉션하는 것이 바람직한 경우가 많습니다. 시간 모니터링. CombinedOutput은 명령이 완료되면 전체 출력을 캡처할 수 있지만 장기간 실행되거나 완료되지 않은 프로세스에는 적합하지 않습니다.

실시간 출력 리디렉션을 위한 일반적인 솔루션은 stdout 및 stderr을 시스템 출력 스트림에 직접 할당하는 것입니다. (os.Stdout 및 os.Stderr). 그러나 이는 터미널에 쓰지 않는 애플리케이션에는 실용적이지 않을 수 있습니다.

파이프를 사용한 솔루션

명령 출력을 로그로 리디렉션하려면 파이프를 활용할 수 있습니다. . 예는 다음과 같습니다.

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)
}
로그인 후 복사

고려 사항

이 방법은 stdout을 처리하지만 별도의 파이프와 고루틴을 생성하여 stderr을 관리할 수도 있습니다. 또한 적절한 정리 및 리소스 관리를 보장하기 위해 컨텍스트 취소 또는 기타 극단적인 경우를 처리해야 할 수도 있습니다.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿