Erstellen einer io.Writer-Schnittstelle für die MongoDB-Protokollierung in Go
Einführung
In Go Protokollierung von Nachrichten werden normalerweise in eine Konsole oder Datei geschrieben. Es ist jedoch auch möglich, Protokolle an andere Ziele, beispielsweise eine Datenbank, auszugeben. In diesem Artikel wird erläutert, wie eine io.Writer-Schnittstelle für die Protokollierung in einer MongoDB-Datenbank implementiert wird.
Implementierung
Um eine io.Writer-Schnittstelle für die MongoDB-Protokollierung zu erstellen, definieren wir einen benutzerdefinierten Typ das die io.Writer-Schnittstelle implementiert. Die Write()-Methode dieses Typs sollte ein neues MongoDB-Dokument mit dem Inhalt des Byte-Slices erstellen und es in der Datenbank speichern.
Hier ist eine Beispielimplementierung:
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 }
Verwendung
Sobald der MongoWriter definiert ist, können Sie ihn verwenden, um das Ausgabeziel für den Standard-Logger oder einen benutzerdefinierten Logger festzulegen logger:
// 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")
Umgang mit Zeilenumbrüchen
Standardmäßig enden Protokollnachrichten mit einem Zeilenumbruch, da der log.Logger ihn anhängt. Um die Protokollierung der Newline zu vermeiden, können Sie die Write()-Methode ändern, um sie zu kürzen:
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) }
Fazit
Durch die Implementierung einer benutzerdefinierten io.Writer-Schnittstelle können Sie ganz einfach erstellen ein Logger, der in eine MongoDB-Datenbank ausgibt. Dadurch können Sie Protokollnachrichten für eine spätere Analyse oder einen späteren Abruf beibehalten.
Das obige ist der detaillierte Inhalt vonWie implementiert man eine io.Writer-Schnittstelle für die MongoDB-Protokollierung in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!