Go の io.Writer 実装による MongoDB ログ インターフェイスの作成
ログ メッセージをデータベースに直接出力できる機能は、非常に便利です。 Go では、log.Logger 型は宛先 io.Writer へのシリアル化されたアクセスを保証します。この保証を利用して、ログ メッセージを MongoDB データベースに書き込むカスタム io.Writer を作成できます。
これを実装するには、io.Writer インターフェイスに準拠する MongoWriter という名前の型を定義します。その Write() メソッドは、新しい MongoDB ドキュメントを作成し、ログ メッセージの内容を保存する必要があります。
type MongoWriter struct { sess *mgo.Session } func (mw *MongoWriter) Write(p []byte) (int, error) { c := mw.sess.DB("").C("log") return len(p), c.Insert(bson.M{ "created": time.Now(), "msg": string(p), }) }
この MongoWriter を使用すると、MongoDB に出力するようにデフォルトのロガーを構成できます。
sess := ... // Obtain a MongoDB session mw := &MongoWriter{sess} log.SetOutput(mw)
または、カスタム ロガーを次のように設定します。 MongoWriter.
mylogger := log.New(mw, "", 0) mylogger.Println("Custom logger message")
ログ メッセージにはデフォルトで改行が追加されることに注意してください。これを防ぐには、データベースに書き込む前にメッセージからメッセージを削除します。
func (mw *MongoWriter) Write(p []byte) (int, error) { origLen := len(p) if len(p) > 0 && p[len(p)-1] == '\n' { p = p[:len(p)-1] // Trim terminating newline } // ... the rest remains the same }
このアプローチを実装すると、MongoDB データベースへのログ記録をシームレスに統合できます。
以上がio.Writer を使用して Go で MongoDB ロギング インターフェイスを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。