Go에서 파일에 로그를 쓰는 방법
Go를 사용하여 로그 파일에 쓰려고 하면 여러 가지 오류가 발생할 수 있습니다. 로그 파일을 생성했음에도 불구하고 시도한 방법으로 로그를 인쇄하거나 추가하지 못할 수 있습니다. 제공된 코드는 이러한 시도를 보여줍니다.
func TestLogging(t *testing.T) { if !FileExists("logfile") { CreateFile("logfile") } f, err := os.Open("logfile") if err != nil { t.Fatalf("error: %v", err) } // attempt #1 log.SetOutput(io.MultiWriter(os.Stderr, f)) log.Println("hello, logfile") // attempt #2 log.SetOutput(io.Writer(f)) log.Println("hello, logfile") // attempt #3 log.SetOutput(f) log.Println("hello, logfile") }
이 문제를 해결하려면 코드에서 os.Open 대신 os.OpenFile을 사용해야 합니다. 올바른 접근 방식은 다음과 같습니다.
f, err := os.OpenFile("testlogfile", os.O_RDWR | os.O_CREATE | os.O_APPEND, 0666) if err != nil { log.Fatalf("error opening file: %v", err) } defer f.Close() log.SetOutput(f) log.Println("This is a test log entry")
Go 문서에 따르면 os.Open은 파일을 읽는 데 사용되며 로그 출력을 설정하는 데는 적합하지 않습니다. 반면에 os.OpenFile을 사용하면 파일을 읽고 쓰기 위해 열 수 있습니다. os.O_APPEND를 설정하면 기존 콘텐츠를 덮어쓰지 않고 파일 끝에 로그 항목이 추가됩니다.
위 내용은 내 Go 코드가 파일에 로그를 쓰지 못하는 이유는 무엇이며 어떻게 해결할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!