Go에서 실행 출력을 Logger로 리디렉션
Go에서 exec 패키지는 외부 명령을 실행하기 위한 메커니즘을 제공합니다. CombinedOutput 메서드는 명령이 완료되면 전체 출력을 캡처할 수 있지만 장기간 실행되거나 완료되지 않은 프로세스에는 적합하지 않을 수 있습니다.
명령 출력을 실시간으로 로거로 리디렉션하려면 더 많은 유연한 접근이 필요합니다. 한 가지 기술은 파이프를 사용하여 명령의 출력을 로거에 연결하는 것입니다.
다음은 예제 코드 조각입니다.
import ( "bufio" "log" "os/exec" ) func main() { cmd := exec.Command("yes") // Create a pipe to connect the command's stdout to the logger stdout, err := cmd.StdoutPipe() if err != nil { log.Fatalf("Failed to create stdout pipe: %v", err) } // Start the command if err := cmd.Start(); err != nil { log.Fatalf("Failed to start command: %v", err) } // Create a buffered reader to read the output line by line in := bufio.NewScanner(stdout) // Read the output and log it in real-time for in.Scan() { log.Printf(in.Text()) } if err := in.Err(); err != nil { log.Printf("Error reading command output: %v", err) } }
이 예에서 Stderr 스트림은 다음을 생성하여 동시에 처리할 수도 있습니다. 별도의 고루틴. 명령의 출력을 로거에 파이프함으로써 개발자는 실시간 출력을 캡처하고 기록할 수 있으므로 애플리케이션에서 프로세스를 더 쉽게 모니터링하고 문제를 해결할 수 있습니다.
위 내용은 Go에서 실시간으로 실행 출력을 로거로 리디렉션하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!