Go에서 파일에 로그 메시지 쓰기
Go에서 파일에 로깅하는 것은 간단한 작업이 될 수 있습니다. 그러나 특정 접근 방식에서는 오류가 발생할 수 있으며 로그 메시지가 파일에 기록되지 않는 이유를 궁금해하게 됩니다.
실패한 접근
제공된 코드는 세 번의 실패한 시도를 보여줍니다. 파일에 로깅할 때:
func TestLogging(t *testing.T) { // ... // 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()이 파일을 열기 때문에 이러한 시도는 실패합니다. 읽기 전용이며 log.SetOutput()에 필요한 쓰기와 호환되지 않습니다.
해결 방법
파일에 성공적으로 로그인하려면 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")
os.OpenFile()은 읽기, 쓰기, 생성 및 추가 권한으로 파일을 열어 다음을 허용합니다. 파일에 로그 메시지를 성공적으로 쓸 수 있습니다. defer f.Close()를 사용하여 로깅이 완료된 후 파일을 닫는 것을 잊지 마세요.
위 내용은 내 Go 로그 메시지가 파일에 기록되지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!