Maison > Article > développement back-end > Comment implémenter une interface io.Writer pour la journalisation MongoDB dans Go ?
Création d'une interface io.Writer pour la journalisation MongoDB dans Go
Introduction
Dans Go, journalisation des messages sont généralement écrits sur une console ou un fichier. Cependant, il est également possible de générer des journaux vers d'autres destinations, telles qu'une base de données. Cet article explore comment implémenter une interface io.Writer pour la journalisation dans une base de données MongoDB.
Implémentation
Pour créer une interface io.Writer pour la journalisation MongoDB, nous définissons un type personnalisé qui implémente l'interface io.Writer. La méthode Write() de ce type doit créer un nouveau document MongoDB avec le contenu de la tranche d'octets et l'enregistrer dans la base de données.
Voici un exemple d'implémentation :
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 }
Utilisation
Une fois le MongoWriter défini, vous pouvez l'utiliser pour définir la destination de sortie de l'enregistreur par défaut ou d'un enregistreur personnalisé. 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")
Gestion des nouvelles lignes
Par défaut, les messages du journal se termineront par une nouvelle ligne car log.Logger l'ajoute. Pour éviter de journaliser la nouvelle ligne, vous pouvez modifier la méthode Write() pour la couper :
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) }
Conclusion
En implémentant une interface io.Writer personnalisée, vous pouvez facilement créer un enregistreur qui génère des sorties vers une base de données MongoDB. Cela vous permet de conserver les messages du journal pour une analyse ou une récupération ultérieure.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!