MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Bắt đầu:Tạo giao diện io.Writer để đăng nhập vào cơ sở dữ liệu mongodb

Điều này có thể dễ dàng thực hiện được vì log.Logger kiểu đảm bảo rằng mỗi thông báo nhật ký được gửi đến io.Writer đích với một Writer.Write() gọi:

Mỗi thao tác ghi nhật ký thực hiện một lệnh gọi phương thức Viết của Writer. Một Logger có thể được sử dụng đồng thời từ nhiều goroutines; nó đảm bảo tuần tự hóa quyền truy cập vào Writer.

Vì vậy, về cơ bản bạn chỉ cần tạo một kiểu thực thi io.WriterWrite() của ai phương thức tạo một tài liệu mới với nội dung của lát byte và lưu nó trong MongoDB.

Đây là một triển khai đơn giản thực hiện điều đó:

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
}

Sử dụng nó:

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.")

Rõ ràng là nếu bạn đang sử dụng một log.Logger khác ví dụ, đặt MongoWriter về điều đó, ví dụ:

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

Lưu ý rằng thông báo nhật ký kết thúc bằng dòng mới là log.Logger nối nó ngay cả khi bản thân thông báo nhật ký không kết thúc bằng dòng mới. Nếu bạn không muốn ghi dòng mới kết thúc, bạn có thể chỉ cần cắt nó đi, ví dụ:

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. Hướng dẫn kiểm tra cơ sở dữ liệu nguồn mở DevOps - Mọi thứ bạn nên biết

  2. Giao dịch Mongo DB 4.0 với Mongoose &NodeJs, Express

  3. Buộc mongodb xuất ra JSON nghiêm ngặt

  4. windows:rails:lỗi khi cài đặt bson_ext

  5. Chuyển đổi dự phòng cơ sở dữ liệu minh bạch cho các ứng dụng của bạn