> 백엔드 개발 > Golang > 외부 프로세스 출력을 실시간으로 Golang의 로그로 리디렉션하려면 어떻게 해야 합니까?

외부 프로세스 출력을 실시간으로 Golang의 로그로 리디렉션하려면 어떻게 해야 합니까?

Patricia Arquette
풀어 주다: 2024-11-06 13:38:03
원래의
871명이 탐색했습니다.

How Do I Redirect External Process Output to Logs in Golang in Real Time?

프로세스 출력을 Golang의 로그로 리디렉션

Golang에서 외부 프로세스를 실행할 때 해당 출력을 즉시 캡처하고 기록하는 것이 유용할 수 있습니다. 프로세스가 완료되기를 기다리고 CombinedOutput()을 사용하면 로깅이 가능하지만 장기 실행되거나 완료되지 않은 프로세스에는 실용적이지 않습니다.

또는 출력하지 않는 서비스의 경우 실시간으로 Stdout에 쓰는 것만으로는 충분하지 않습니다. 터미널. 한 가지 해결책은 효율적인 출력 리디렉션을 위해 파이프를 활용하는 것입니다.

리디렉션을 위해 파이프 활용

파이프는 프로세스 간 연결을 생성하여 데이터 전송을 가능하게 합니다. 프로세스 출력을 로그로 리디렉션하려면 다음 단계를 따르세요.

  1. 파이프 생성: StdoutPipe()를 사용하여 프로세스의 Stdout을 읽기 위한 파이프를 생성합니다.
  2. 프로세스 실행: 설정된 파이프로 프로세스를 시작합니다.
  3. 출력 읽기: 버퍼 스캐너를 사용하여 Stdout 파이프의 출력을 한 줄씩 읽습니다.
  4. 로깅: log.Printf()를 활용하여 원하는 로그에 각 줄을 기록합니다.

두 출력 채널을 동시에 처리하기 위한 고루틴을 생성하여 Stderr에 대한 처리기를 추가할 수 있습니다. .

구현 예:

출력 리디렉션을 위해 파이프를 사용하는 다음 코드 조각을 고려하세요.

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

if err := cmd.Start(); err != nil {
    return 0, err
}

in := bufio.NewScanner(stdout)

for in.Scan() {
    log.Printf(in.Text())
}
if err := in.Err(); err != nil {
    log.Printf("error: %s", err)
}
로그인 후 복사

이 접근 방식을 사용하면 다음을 효과적으로 수행할 수 있습니다. 적시에 외부 프로세스의 출력을 캡처하고 기록하여 디버깅 및 분석에 귀중한 정보를 사용할 수 있도록 합니다.

위 내용은 외부 프로세스 출력을 실시간으로 Golang의 로그로 리디렉션하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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