Go एप्लिकेशन में लॉगिंग: शुरुआती के लिए बेस्ट प्रैक्टिसेज

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Go एप्लिकेशन में लॉगिंग: शुरुआती के लिए बेस्ट प्रैक्टिसेज

\n\n

लॉगिंग किसी भी गंभीर एप्लिकेशन का एक महत्वपूर्ण हिस्सा है। यह एरर ट्रैक करने, सिस्टम के व्यवहार का विश्लेषण करने और यह समझने में मदद करता है कि "हुड के नीचे" क्या हो रहा है। इस लेख में, हम शुरुआती डेवलपर्स के लिए Go (Golang) में लॉगिंग की बेस्ट प्रैक्टिसेज पर चर्चा करेंगे। आप जानेंगे कि कौन सी लाइब्रेरीज़ इस्तेमाल करनी हैं, लॉग्स को कैसे व्यवस्थित करना है और सामान्य गलतियों से कैसे बचना है।

\n\n

Go में लॉगिंग क्यों महत्वपूर्ण है?

\n\n

Go एक ऐसी भाषा है जो हाई-लोड सर्वर एप्लिकेशन और माइक्रोसर्विसेज बनाने पर केंद्रित है। ऐसे सिस्टम में गुणवत्तापूर्ण लॉगिंग के बिना यह असंभव है:

\n\n
    \n
  • खराबी का कारण जल्दी से ढूंढना
  • \n
  • घटनाओं के क्रम को समझना
  • \n
  • मॉनिटरिंग के लिए मेट्रिक्स इकट्ठा करना
  • \n
  • प्रोडक्शन एनवायरनमेंट में कोड को डीबग करना
  • \n
\n\n

गलत तरीके से कॉन्फ़िगर की गई लॉगिंग से महत्वपूर्ण डेटा खो सकता है या, इसके विपरीत, लाखों बेकार संदेशों से डिस्क भर सकती है। इसलिए शुरू से ही सही आर्किटेक्चर तैयार करना महत्वपूर्ण है।

\n\n

स्टैंडर्ड लाइब्रेरी log

\n\n

Go सरल प्रोजेक्ट्स के लिए उपयुक्त एक बिल्ट-इन पैकेज log प्रदान करता है। यह stdout/stderr पर संदेश आउटपुट कर सकता है, टाइमस्टैम्प जोड़ सकता है और घातक एरर पर प्रोग्राम को समाप्त कर सकता है।

\n\n
package main\n\nimport (\n    "log"\n)\n\nfunc main() {\n    log.Println("एप्लिकेशन शुरू हुआ")\n    log.Printf("उपयोगकर्ता %s ने सिस्टम में प्रवेश किया", "admin")\n    // log.Fatal("गंभीर त्रुटि") // प्रोग्राम समाप्त करता है\n}
\n\n

स्टैंडर्ड लॉगर की कमियां:

\n
    \n
  • कोई लॉगिंग लेवल नहीं (debug, info, warn, error)
  • \n
  • कोई स्ट्रक्चर्ड आउटपुट नहीं (केवल टेक्स्ट)
  • \n
  • फॉर्मेट और आउटपुट डायरेक्शन बदलना मुश्किल
  • \n
\n\n

सीखने वाले प्रोजेक्ट्स और सरल उपयोगिताओं के लिए यह पर्याप्त है, लेकिन प्रोडक्शन एप्लिकेशन के लिए अधिक शक्तिशाली लाइब्रेरीज़ का उपयोग करना बेहतर है।

\n\n

लॉगिंग के लिए लोकप्रिय लाइब्रेरीज़

\n\n

आइए तीन सबसे सामान्य विकल्पों पर नज़र डालें।

\n\n

1. Logrus

\n\n

Logrus Go के लिए पहली थर्ड-पार्टी लाइब्रेरीज़ में से एक है। यह लॉगिंग लेवल, स्ट्रक्चर्ड फील्ड और कई आउटपुट फॉर्मेट (JSON, टेक्स्ट) को सपोर्ट करता है।

\n\n
package main\n\nimport (\n    "github.com/sirupsen/logrus"\n)\n\nfunc main() {\n    log := logrus.New()\n    log.SetFormatter(&logrus.JSONFormatter{})\n    log.SetLevel(logrus.InfoLevel)\n\n    log.WithFields(logrus.Fields{\n        "user":   "राहुल",\n        "action": "login",\n    }).Info("उपयोगकर्ता ने सिस्टम में प्रवेश किया")\n}
\n\n

Logrus उपयोग में आसान है, लेकिन इसमें मेमोरी की खपत अधिक है और यह आधुनिक विकल्पों की तुलना में थोड़ा धीमा है।

\n\n

2. Zerolog

\n\n

Zerolog एक आधुनिक लाइब्रेरी है जो प्रदर्शन और न्यूनतम मेमोरी आवंटन पर केंद्रित है। यह zero-allocation दृष्टिकोण का उपयोग करता है और हाई-लोड सिस्टम के लिए आदर्श है।

\n\n
package main\n\nimport (\n    "github.com/rs/zerolog"\n    "github.com/rs/zerolog/log"\n)\n\nfunc main() {\n    zerolog.TimeFieldFormat = zerolog.TimeFormatUnix\n\n    log.Info().\n        Str("user", "राहुल").\n        Str("action", "login").\n        Msg("उपयोगकर्ता ने सिस्टम में प्रवेश किया")\n\n    log.Error().\n        Err(fmt.Errorf("कनेक्शन अस्वीकार")).\n        Msg("DB से कनेक्शन में त्रुटि")\n}
\n\n

Zerolog डिफ़ॉल्ट रूप से JSON फॉर्मेट में लॉग आउटपुट करता है, जो मॉनिटरिंग सिस्टम (ELK, Grafana Loki) द्वारा उन्हें पार्स करना आसान बनाता है।

\n\n

3. Zap

\n\n

Uber का Zap एक और हाई-परफॉर्मेंस लॉगर है। यह दो मोड में काम करता है: SugaredLogger (सुविधाजनक, लेकिन थोड़ा धीमा) और Logger (अधिकतम गति)।

\n\n
package main\n\nimport (\n    "go.uber.org/zap"\n)\n\nfunc main() {\n    logger, _ := zap.NewProduction()\n    defer logger.Sync()\n\n    logger.Info("सर्वर शुरू हुआ",\n        zap.String("port", "8080"),\n        zap.Int("workers", 10),\n    )\n}
\n\n

नए

ब्लॉग

पुस्तक अनुशंसाएँ