MongoDB के साथ कनेक्शन संबंधी समस्याओं को डीबग करते समय विस्तृत लॉग एकत्र करना एक महत्वपूर्ण कदम है। इस संक्षिप्त पोस्ट में, हम दिखाएंगे कि MongoDB Node.JS ड्राइवर और Mongoose पर लॉगिंग कैसे सक्षम करें। हम इस चर्चा में नेवला संस्करण 5.x और ड्राइवर संस्करण 3.5 का उल्लेख करते हैं।
MongoDB Node.JS Driver लॉगिंग करना
मूल ड्राइवर के लिए लॉगिंग तंत्र को लॉगिंग दस्तावेज़ में अच्छी तरह से समझाया गया है। आवश्यक विशेषताएं हैं:
- 3 लॉग स्तर हैं -
debug
,info
,warn
औरerror
. डिफ़ॉल्ट हैerror
.info
मुद्दों को डीबग करने का प्रयास करते समय एक अच्छा विकल्प है।debug
अत्यंत विस्तृत अनुरेखण सक्षम करता है, इसलिए इसका उपयोग केवल तभी करें जबinfo
. पर उत्पन्न लॉग स्तर पर्याप्त नहीं हैं। - डिफ़ॉल्ट रूप से लॉग
console.log()
पर जाते हैं
लॉग स्तर सेट करना
कोड में
const MongoClient =आवश्यकता ('mongodb')। MongoClient;const लकड़हारा =आवश्यकता ('mongodb')। लकड़हारा; लकड़हारा।लॉग स्तर को कोड में सेट करते समय, आप विशिष्ट वर्गों के लिए फ़िल्टर भी जोड़ सकते हैं। उदा.
Logger.filter('class', ['Connection', 'Pool']); // लॉग ओनली कनेक्शन और पूल क्रिएट थिंग्सविकल्पों के माध्यम से
logger
औरlogLevel
कनेक्शन विकल्पों के माध्यम से भी पारित किया जा सकता है, हम आपको नेवला अनुभाग में एक उदाहरण दिखाते हैं।मोंगोज़ के लिए लॉगिंग
Mongoose के लिए डीबग लेवल लॉगिंग को सक्षम करना आसान है:
mongoose.set('debug', true)हालाँकि, यह केवल MongoDB संचालन जैसे प्रश्नों और अपडेट को लॉग करने में सक्षम बनाता है। यदि आप कनेक्शन, कनेक्शन पूल आदि से संबंधित मुद्दों को डीबग करना चाहते हैं, तो यह कोई मदद नहीं है।
दूसरी ओर, चूंकि Mongoose नीचे MongoDB Node.JS ड्राइवर का उपयोग करता है, यदि हम ड्राइवर के लिए लॉगिंग सक्षम करते हैं, तो हम ड्राइवर से लॉग भी प्राप्त कर सकेंगे। ऐसा करने का सबसे आसान तरीका लॉग से संबंधित विकल्पों को पास करना है। उदा.
//ड्राइवरवर विकल्पों के लिए लॉगिंग विकल्प ={लॉगर:कंसोल.लॉग, लॉगरलेवल:'जानकारी', पूलसाइज:10}var uri ='mongodb://user:pass@localhost:port,anotherhost:port,यातनोदर :port/mydatabase';// optionsmongoose.connect(uri, options) के साथ;Mongoose विशिष्ट विकल्पों को छोड़कर, Mongoose अन्य सभी विकल्पों को ड्राइवर के पास भेजता है। ड्राइवर दस्तावेज़ निम्नलिखित विकल्पों की व्याख्या करता है:
loggerLevel
- स्ट्रिंग - वैकल्पिक - लॉगिंग स्तर (त्रुटि/चेतावनी/जानकारी/डीबग)logger
- वस्तु - वैकल्पिक - कस्टम लकड़हारा वस्तु
उपरोक्त उदाहरण में, हम loggerLevel
पास करते हैं info
. के रूप में और logger
console.log
. के रूप में ।
कस्टम लकड़हारा
यद्यपि ड्राइवर प्रलेखन कस्टम लॉगर लिखने पर एक उदाहरण प्रदान करता है, यह बहुत उपयोगी नहीं है। आम तौर पर, हम इन लॉग को मानक एप्लिकेशन लॉग से दूर एक अलग फ़ाइल में भेजने का प्रयास करेंगे और हम ऐसा करने में सक्षम होने के लिए कस्टम लॉगर कार्यक्षमता का उपयोग कर सकते हैं।
यदि आप ड्राइवर के लॉगिंग सोर्स कोड को देखते हैं, तो निम्नलिखित स्पष्ट हो जाता है:
- डिफ़ॉल्ट लकड़हारा है
console.log
- लकड़हारा एक कार्य होना चाहिए
- लॉगर फ़ंक्शन में दो लगते हैं तर्क:
- इस प्रारूप में संदेश स्ट्रिंग इस प्रकार है:
[LEVEL-className:pid] टाइमस्टैम्प logMsg
उदाहरण के लिए:
[INFO-Server:9224] 1589439590772 सर्वर sg-example-100.servers.scalegrid.io:27017 ने {"name":"MongoNetworkError"}
संदेश के साथ इवेंट एरर निकाल दिया - एक राज्य वस्तु जिसमें निम्नलिखित जानकारी होती है:
var State ={ प्रकार:'चेतावनी', // स्तर संदेश:संदेश, // लॉग संदेश वर्गनाम:वर्गनाम, // वर्गनाम pid:pid, दिनांक:दिनांक समय };
उदाहरण के लिए:
{ प्रकार:'जानकारी', संदेश:'सर्वर sg-rs-91.servers.scalegrid.io:27017 संदेश के साथ घटना त्रुटि को निकाल दिया {"name":"MongoNetworkError"}', className:'सर्वर', पीआईडी:9224, तारीख:158943959072}
इसलिए, एक कस्टम लकड़हारा लिखने के लिए, आप इन संदेशों को अपने इच्छित प्रारूप में लॉग करने के लिए अपनी पसंद के लॉगिंग ढांचे का उपयोग करने के लिए बस एक फ़ंक्शन लिख सकते हैं।पी>
यहाँ एक कस्टम लकड़हारा के रूप में स्थापित एक काफी आदिम बुनियन लकड़हारा है:
var लकड़हारा =आवश्यकता ('बनियन'); var log =Logger.createLogger ({नाम:"MongoDB ड्राइवर", धाराएँ:[ {स्ट्रीम:प्रक्रिया.stdout, स्तर:'जानकारी'}, {स्ट्रीम:प्रक्रिया। स्टडआउट, स्तर:'डीबग'}, {स्ट्रीम:प्रक्रिया.स्टडर, स्तर:'त्रुटि'}],}); समारोह mongoLogger(msg, State) {// console.log(msg, State); स्विच (राज्य प्रकार) {केस 'डीबग':log.debug (राज्य); टूटना; मामला 'जानकारी':log.info (राज्य); टूटना; मामला 'चेतावनी':log.warn (राज्य); मामला 'त्रुटि':डिफ़ॉल्ट:log.error (राज्य); }}
फिर इसे अपने विकल्पों में पास करें:
var options ={ लकड़हारा:mongoLogger, loggerLevel:'जानकारी'}
console.log से आउटपुट तब होगा:
[सूचना-सर्वर:9413] 158944250730 सर्वर एसजी-उदाहरण-85.सर्वर.स्केलग्रिड.आईओ:27017 सक्रिय घटना संदेश के साथ बंद हो गया {"नाम":"मोंगोनेटवर्क त्रुटि", "संदेश":"getaddrinfo ENOTFOUND एसजी-उदाहरण -85.servers.scalegrid.io SG-example-85.servers.scalegrid.io:27017","stack":"Error:getaddrinfo ENOTFOUND SG-example-85.servers.scalegrid.io SG-example-85.servers .scalegrid.io:27017\n GetAddrInfoReqWrap.onlookup पर [अपूर्ण के रूप में] (dns.js:56:26)"} { टाइप करें:'जानकारी', संदेश:'सर्वर SG-example-85.servers.scalegrid.io:27017 ने घटना को संदेश के साथ बंद कर दिया {"name":"MongoNetworkError","message":"getaddrinfo ENOTFOUND SG-example-85.servers.scalegrid.io SG-example-85.servers.scalegrid.io:27017"," स्टैक":"त्रुटि:getaddrinfo ENOTFOUND SG-example-85.servers.scalegrid.io SG-example-85.servers.scalegrid.io:27017\\n GetAddrInfoReqWrap.onlookup पर [अपूर्ण के रूप में] (dns.js:56:26)"}', वर्गनाम:'सर्वर', pid:9413, दिनांक:1589442507330}
ब्यून आउटपुट होगा:
{"name":"MongoDB Driver",,"hostname":"",,"pid":9413,"level":30,"type":"info","message":"server SG) -example-85.servers.scalegrid.io:27017 सक्रिय घटना संदेश के साथ बंद हो गई {\"name\":\"MongoNetworkError\",\"message\":\"getaddrinfo ENOTFOUND SG-example-85.servers.scalegrid .io SG-example-85.servers.scalegrid.io:27017\",\"stack\":\"त्रुटि:getaddrinfo ENOTFOUND SG-example-85.servers.scalegrid.io SG-example-85.servers.scalegrid .io:27017\\n GetAddrInfoReqWrap.onlookup पर [अपूर्ण के रूप में] (dns.js:56:26)\"}",,"className":"Server","date":1589442507330,"msg":"", "समय":"2020-05-14T07:48:27.331Z",,"v":0}
तब आप बुनियन की सभी विशेषताओं का उपयोग लॉग से निपटने के लिए कर सकेंगे जैसा कि आप फिट देखते हैं उदा। उन्हें एक घूर्णन फ़ाइल में भेजना, त्रुटि और सूचना संदेशों को अलग करना आदि।
हम आशा करते हैं कि MongoDB Node.JS ड्राइवर और Mongoose पर लॉगिंग सक्षम करने पर यह मार्गदर्शिका आपके सेटअप में आपके लिए सहायक रही है। यदि आपके कोई प्रश्न हैं या किसी सहायता की आवश्यकता है, तो नीचे टिप्पणी अनुभाग में एक टिप्पणी छोड़ने के लिए स्वतंत्र महसूस करें।