MongoDB 로그인을 위한 io.Writer 인터페이스 만들기 Go
소개
Go에서 메시지 로깅 일반적으로 콘솔이나 파일에 기록됩니다. 그러나 데이터베이스와 같은 다른 대상으로 로그를 출력하는 것도 가능합니다. 이 기사에서는 MongoDB 데이터베이스에 로깅하기 위한 io.Writer 인터페이스를 구현하는 방법을 살펴봅니다.
구현
MongoDB 로깅을 위한 io.Writer 인터페이스를 생성하려면 사용자 정의 유형을 정의합니다. io.Writer 인터페이스를 구현합니다. 이 유형의 Write() 메소드는 바이트 슬라이스의 내용으로 새 MongoDB 문서를 생성하고 이를 데이터베이스에 저장해야 합니다.
다음은 구현 예입니다.
type MongoWriter struct { sess *mgo.Session } func (mw *MongoWriter) Write(p []byte) (n int, err error) { c := mw.sess.DB("").C("log") err = c.Insert(bson.M{ "created": time.Now(), "msg": string(p), }) if err != nil { return } return len(p), nil }
사용법
MongoWriter가 정의되면 이를 사용하여 기본 로거 또는 사용자 정의 로거:
// Set the default logger output to the MongoWriter log.SetOutput(mw) // Generate log messages that will be inserted into MongoDB log.Println("I'm the first log message.") // Create a custom logger with the MongoWriter mylogger := log.New(mw, "", 0) // Write log messages using the custom logger mylogger.Println("Custom logger message")
새 줄 처리
기본적으로 로그 메시지는 log.Logger가 새 줄을 추가하므로 새 줄로 끝납니다. 개행 기록을 방지하려면 Write() 메서드를 수정하여 잘라낼 수 있습니다.
func (mw *MongoWriter) Write(p []byte) (n int, err error) { origLen := len(p) if len(p) > 0 && p[len(p)-1] == '\n' { p = p[:len(p)-1] // Cut terminating newline } c := mw.sess.DB("").C("log") // ... the rest is the same return origLen, nil // Must return original length (we resliced p) }
결론
사용자 정의 io.Writer 인터페이스를 구현하면 다음과 같은 작업을 쉽게 생성할 수 있습니다. MongoDB 데이터베이스로 출력하는 로거입니다. 이를 통해 나중에 분석하거나 검색할 수 있도록 로그 메시지를 유지할 수 있습니다.
위 내용은 Go에서 MongoDB 로그인을 위한 io.Writer 인터페이스를 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!