MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

जाओ:मोंगोडब डेटाबेस में लॉगिंग के लिए io.Writer इंटीफेस बनाएं

यह आसानी से संभव है, क्योंकि log.Logger प्रकार गारंटी देता है कि प्रत्येक लॉग संदेश गंतव्य तक पहुंचा दिया जाता है io.Writer एक Writer.Write() . के साथ कॉल करें:

<ब्लॉकक्वॉट>

प्रत्येक लॉगिंग ऑपरेशन राइटर की राइट मेथड को सिंगल कॉल करता है। एक लकड़हारा एक साथ कई गोरोइन से उपयोग किया जा सकता है; यह लेखक तक पहुंच को क्रमबद्ध करने की गारंटी देता है।

तो मूल रूप से आपको केवल एक प्रकार बनाने की आवश्यकता है जो io.Writer . को लागू करता है , और जिसका Write() विधि बाइट स्लाइस की सामग्री के साथ एक नया दस्तावेज़ बनाती है, और इसे MongoDB में सहेजती है।

यहाँ एक सरल कार्यान्वयन है जो यह करता है:

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
}

इसका उपयोग करना:

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

स्पष्ट रूप से यदि आप किसी अन्य log.Logger . का उपयोग कर रहे हैं उदाहरण के लिए, MongoWriter सेट करें उसके लिए, उदा.:

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

ध्यान दें कि लॉग संदेश log.Logger . के रूप में नई पंक्ति के साथ समाप्त होते हैं इसे जोड़ता है भले ही लॉग संदेश स्वयं न्यूलाइन के साथ समाप्त न हो। यदि आप अंतिम नई पंक्ति को लॉग नहीं करना चाहते हैं, तो आप इसे आसानी से काट सकते हैं, उदा.:

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. MongoDB और Robomongo:कनेक्ट नहीं हो सकता (प्रमाणीकरण)

  2. MongoDB ClusterControl 1.4 . में सुविधाएँ

  3. MongoDB में अनेक से अनेक संबंध कैसे व्यवस्थित करें?

  4. mongodb - यदि मौजूद नहीं है तो दस्तावेज़ बनाएं, अन्यथा सरणी पर धक्का दें

  5. MongoDB दस्तावेज़ों और संग्रहों को दृष्टिगत रूप से प्रबंधित करना