실시간으로 명령 출력을 콘솔과 로그 파일로 동시에 리디렉션하는 방법
제공된 코드는 명령의 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!