Kotlin की निगरानी और लॉगिंग: प्रोडक्शन में बग को कैसे न चूकें

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

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

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

क्यों एक "खामोश" Kotlin-एप्लिकेशन एक टाइम बम है

\n\n

कल्पना करें: आपने Kotlin पर एक सेवा शुरू की है, यह घड़ी की तरह काम कर रही है। उपयोगकर्ता खुश हैं, मीट्रिक्स हरे हैं। लेकिन एक दिन लोड बढ़ जाता है, latency बढ़ जाती है, और आपको पता नहीं है कि क्यों। लॉगिंग और निगरानी के बिना, आप बिना नक्शे और रडार के जहाज के कप्तान हैं। इस लेख में, हम देखेंगे कि कैसे अपने एप्लिकेशन को "ब्लैक बॉक्स" से एक पारदर्शी सिस्टम में बदलें, जहाँ हर विफलता नंगी आँखों से दिखाई देती है।

\n\n

हम दस्तावेज़ीकरण की नकल नहीं करेंगे। इसके बजाय - वास्तविक मामले, तैयार स्निपेट और आर्किटेक्चरल समाधान जो प्रोडक्शन में काम करते हैं। चलिए शुरू करते हैं।

\n\n

हाथी को टुकड़ों में बाँटना: लॉगिंग बनाम निगरानी

\n\n

कोड लिखने से पहले, आइए शर्तों पर सहमत हों। लॉगिंग घटनाओं (त्रुटियों, चेतावनियों, डिबग जानकारी) को संरचित या टेक्स्ट रूप में रिकॉर्ड करना है। निगरानी मीट्रिक्स (प्रतिक्रिया समय, अनुरोधों की संख्या, CPU लोड) एकत्र करना और उनका विज़ुअलाइज़ेशन है। आदर्श रूप से, वे एक साथ काम करते हैं: घटना के गहन विश्लेषण के लिए लॉग की आवश्यकता होती है, विसंगतियों का तेजी से पता लगाने के लिए मीट्रिक्स की।

\n\n

Kotlin में लॉगिंग सेट करना: सरल से जटिल तक

\n\n

लाइब्रेरी चुनना: SLF4J + Logback - स्वर्ण मानक

\n\n

Kotlin Java इकोसिस्टम के साथ अच्छी तरह से काम करता है, इसलिए SLF4J (फ़ेसेड) और Logback (कार्यान्वयन) नंबर 1 विकल्प हैं। वे हल्के, कुशल हैं और एसिंक्रोनस लॉगिंग का समर्थन करते हैं।

\n\n

build.gradle.kts में जोड़ें:

\n\n
implementation("ch.qos.logback:logback-classic:1.4.14")\nimplementation("io.github.microutils:kotlin-logging-jvm:3.0.5")
\n\n

kotlin-logging SLF4J के ऊपर एक पतली रैपर है जो कोड को साफ बनाती है। तुलना करें:

\n\n

रैपर के बिना:

\n
private val logger = LoggerFactory.getLogger(MyService::class.java)\nlogger.info("User {} logged in", userId)
\n\n

kotlin-logging के साथ:

\n
private val logger = KotlinLogging.logger {}\nlogger.info { "User $userId logged in" }
\n\n

स्ट्रिंग की आलसी गणना प्रदर्शन के लिए एक बोनस है: स्ट्रिंग तभी बनेगी जब लॉगिंग स्तर सक्षम हो।

\n\n

Logback कॉन्फ़िगरेशन: संरचित लॉग - अनिवार्य

\n\n

src/main/resources में logback.xml बनाएँ:

\n\n
<configuration>\n    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">\n        <encoder class="net.logstash.logback.encoder.LogstashEncoder"/>\n    </appender>\n\n    <root level="INFO">\n        <appender-ref ref="CONSOLE"/>\n    </root>\n</configuration>
\n\n

हम LogstashEncoder का उपयोग कर रहे हैं - यह लॉग को JSON में बदल देता है। यह महत्वपूर्ण है यदि आप लॉग को Elasticsearch, Loki या किसी अन्य एग्रीगेटर को भेज रहे हैं। JSON लॉग को पार्स करना, फ़िल्टर करना और विश्लेषण करना आसान है।

\n\n

निर्भरता जोड़ना न भूलें:

\n
implementation("net.logstash.logback:logstash-logback-encoder:7.4")
\n\n

सार्थक लॉग लिखना: संदर्भ ही सब कुछ है

\n\n

"Error occurred" जैसे लॉग बेकार हैं। MDC (Mapped Diagnostic Context) जोड़ें - यह आपके लॉग के लिए टैग की तरह है।

\n\n
import org.slf4j.MDC\n\nclass OrderService {\n    private val logger = KotlinLogging.logger {}\n\n    fun processOrder(orderId: String, userId: String) {\n        MDC.put("orderId", orderId)\n        MDC.put("userId", userId)\n        try {\n            logger.info { "Processing order" }\n            // व्यावसायिक तर्क\n        } catch (e: Exception) {\n            logger.error(e) { "Order processing failed" }\n        } finally {\n            MDC.clear()\n        }\n    }\n}
\n\n

अब लॉग एग्रीगेटर में, आप एक विशिष्ट ऑर्डर या उपयोगकर्ता के लिए सेकंडों में सभी रिकॉर्ड पा सकते हैं।

\n\n

Kotlin अनुप्रयोगों की निगरानी:

ब्लॉग

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