MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Buka:Buat antarmuka io.Writer untuk masuk ke database mongodb

Ini mudah dilakukan, karena log.Logger type menjamin bahwa setiap pesan log dikirim ke io.Writer tujuan dengan satu Writer.Write() hubungi:

Setiap operasi logging membuat satu panggilan ke metode Writer Writer. Logger dapat digunakan secara bersamaan dari beberapa goroutine; itu menjamin untuk membuat serial akses ke Writer.

Jadi pada dasarnya Anda hanya perlu membuat tipe yang mengimplementasikan io.Writer , dan yang Write() metode membuat dokumen baru dengan isi potongan byte, dan menyimpannya di MongoDB.

Inilah implementasi sederhana yang melakukan itu:

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
}

Menggunakannya:

sess := ... // Get a MongoDB session

mw := &MongoWriter{sess}
log.SetOutput(mw)

// Now the default Logger of the log package uses our MongoWriter.
// Generate a log message that will be inserted into MongoDB:
log.Println("I'm the first log message.")
log.Println("I'm multi-line,\nbut will still be in a single log message.")

Jelas jika Anda menggunakan log.Logger lain misalnya, atur MongoWriter untuk itu, misalnya:

mylogger := log.New(mw, "", 0)
mylogger.Println("Custom logger")

Perhatikan bahwa pesan log diakhiri dengan baris baru sebagai log.Logger menambahkannya bahkan jika pesan log itu sendiri tidak diakhiri dengan baris baru. Jika Anda tidak ingin mencatat akhir baris baru, Anda cukup memotongnya, mis.:

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)
}



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cara Membuat File konfigurasi Untuk MongoDB

  2. Cara menjatuhkan indeks menggunakan Mongoose

  3. Mongodb mengurutkan array dalam

  4. Kursor MongoDB.hitung()

  5. Kembalikan hanya elemen sub-dokumen yang cocok dalam array bersarang