কম্পিউটার টিউটোরিয়াল

লগ ম্যানেজমেন্টে পারদর্শিতা: অপঠনীয় মিশ্রণ এড়ানোর উপায়

जब आप एक अजीब, प्रतीत होता है असाध्य बग में फंसते हैं, तो अपने लॉगिंग को सुधारना आपके द्वारा उठाया गया सबसे अच्छा कदम हो सकता है। उत्कृष्ट लॉगिंग पूरे बग वर्गों का पता लगाने और ठीक करने का सबसे आसान तरीका है। जब आप पर्याप्त जानकारी लॉग करते हैं, तो आप देख सकते हैं कि एक रिक्वेस्ट के दौरान आपका डेटा कैसे बदलता है। आप अन्य सेवाओं को किए गए कॉल को ट्रैक कर सकते हैं, और प्रतिक्रिया की जांच कर सकते हैं। वास्तव में, जब डिबगर्स विफल हुए, तो लॉगिंग ने मुझे अब तक के सबसे कठिन बग को ठीक करने में मदद की।

लेकिन बहुत ज्यादा लॉग करें, और आपकी लॉग फाइलें जल्दी ही अपठनीय, अनुपयोगी संदेशों के ढेर में बदल जाएंगी। आप उस डेटा के ढेर से सिर्फ अपनी परवाह की जानकारी कैसे निकाल सकते हैं? क्या आप संदेशों को इस तरह प्रिंट कर सकते हैं जिसे बाद में फ़िल्टर करना आसान हो?

अपने लॉग संदेशों को चिह्नित करना

रेल्स में TaggedLogging शामिल है, जो आपको संबंधित लॉग संदेशों को जल्दी से वर्गीकृत करने में मदद कर सकता है। जब आप एक लॉगर को टैग करते हैं, तो आपको अपने संदेश की शुरुआत में एक मार्कर मिलेगा। इसलिए इसके बजाय:

Finding people... Person Load (0.3ms) SELECT "people".* FROM "people" Found 0 people!

आप रेल्स लॉगर को टैग कर सकते हैं:

logger.tagged("People") do logger.debug "Finding people..." @people = Person.all logger.debug "Found #{@people.length} people!" end

और आप ऐसा कुछ देखेंगे:

[People] Finding people... [People] Person Load (0.3ms) SELECT "people".* FROM "people" [People] Found 0 people!

अब, विभिन्न चीजों की परवाह करने वाले लॉग संदेश अलग दिख सकते हैं।

कुछ टैग्ड लॉगर उदाहरण

जैसे-जैसे आप अधिक बार लॉग करते हैं, और अधिक जटिल चीजों को लॉग करते हैं, आप स्वाभाविक रूप से उन क्षेत्रों को नोटिस करेंगे जहां वे टैग आपके संदेशों को स्पष्ट करेंगे। लेकिन कुछ स्थान हैं जहां मैंने टैग्ड लॉगिंग को विशेष रूप से उपयोगी पाया है। मैं आमतौर पर उन्हें तुरंत टैग करता हूँ।

आप अन्य API को किए गए अनुरोधों को लॉग कर सकते हैं:

logger.tagged("GitHub API") do uri = URI("https://api.github.com/repos/rails/rails/tags") logger.info { "Fetching #{uri}" } tags = JSON.parse(Net::HTTP.get(uri)) logger.info { "First tag: #{tags.first["name"]}" } end
[GitHub API] Fetching https://api.github.com/repos/rails/rails/tags [GitHub API] First tag: v4.2.4.rc1

इस तरह, आप आसानी से देख सकते हैं कि आपका ऐप उस API से कैसे और कब बात कर रहा है।

(यह Faraday मिडलवेयर के साथ विशेष रूप से अच्छा काम करता है, या यदि आप केवल गेटवे के माध्यम से सर्वर के साथ संवाद करते हैं)।

बैकग्राउंड जॉब भी टैग्ड लॉगिंग के साथ अच्छा काम करते हैं:

require "active_support/tagged_logging" Resque.logger = ActiveSupport::TaggedLogging.new(Resque.logger) module LoggedJob def around_perform_log_job(*args) logger.tagged(name) do logger.info { "Performing #{name} with #{args.inspect}" } yield end end end class MyJob extend LoggedJob def self.perform(*args) ... end end

अब, LoggedJob को एक्सटेंड करने वाला कोई भी जॉब अपने सभी लॉग संदेशों को जॉब के क्लास नाम के साथ टैग किया हुआ पाएगा।

और यदि आपके पास एक लॉग्ड-इन यूजर है, तो आप संदेशों को उनके यूजर आईडी के साथ टैग कर सकते हैं:

logger.tagged(current_user_id ? "user-#{current_user_id}" : "user-anonymous") do logger.debug "Finding people..." @people = Person.all logger.debug "Found #{@people.length} people!" end
[user-123] Finding people... [user-123] Person Load (0.3ms) SELECT "people".* FROM "people" [user-123] Found 0 people!

अंत में, यदि आप अपने config/environments/production.rb (या development.rb) में एक लाइन जोड़ते हैं, तो आप रेल्स को अपने संदेशों को स्वचालित रूप से टैग करने के लिए कह सकते हैं:

config.log_tags = [ :subdomain, :uuid ]

log_tags उन टैग्स को सूचीबद्ध करता है जिन्हें आप हर रेल्स लॉग एंट्री की शुरुआत में दिखाना चाहते हैं। प्रत्येक सिंबल ActionDispatch::Request पर एक विधि को संदर्भित करता है, इसलिए :uuid का अर्थ है request.uuid।

आप एक Proc भी पास कर सकते हैं जो एक request ऑब्जेक्ट लेता है:

config.log_tags = [ :subdomain, :uuid, lambda { |request| request.headers["User-Agent"] } ]

लेकिन मैं इसे बहुत बार नहीं देखता।

ये डिफ़ॉल्ट टैग अच्छे हैं: uuid एक रिक्वेस्ट में होने वाले सभी लॉग एंट्री को एक साथ बांध सकता है, और यदि आप सर्वर पर सेशन रख रहे हैं, तो सेशन आईडी भी मददगार है। उन टैग्स के साथ, और पर्याप्त संदेशों के साथ, आप अपने ऐप के माध्यम से कुछ वास्तव में जटिल पथों का पता लगा सकते हैं। और आमतौर पर, एक बुरे बग के होने का पता लगाने के लिए यही आवश्यक होता है।

आप अपने ऐप्स में रेल्स लॉगर का कितना उपयोग करते हैं? क्या आपने टैग्ड लॉगिंग आजमाई है? यदि नहीं, तो इसके लिए एक जगह खोजने की कोशिश करें। अपने यूजर्स द्वारा की गई कार्रवाइयों को टैग करना एक अच्छी शुरुआत है। अगली बार जब आपको एक पागल मल्टी-स्टेप बग डीबग करना पड़े, तो यह आपकी मदद करेगा।

यदि आप लॉगिंग और अन्य डीबगिंग तकनीकों के बारे में अधिक जानना चाहते हैं, तो मैंने Practicing Rails के एक पूरे अध्याय को आपके ऐप्स बनाते समय आने वाली त्रुटियों को खोजने और ठीक करने के लिए समर्पित किया है। पहला अध्याय मुफ्त में यहाँ प्राप्त करें।

  1. ম্যাক ডেস্কটপ থেকে Macintosh HD আইকন সরিয়ে ফেলার দ্রুত গাইড

  2. নকল 'Cyber Security' অ্যান্টিভাইরাস আপনার পিসি থেকে নিরাপদে রিমুভ করার পদ্ধতি

  3. উইন্ডোজ ১০ পিসি থেকে ম্যালওয়্যার নিরাপদে মুছে ফেলার ধাপে ধাপে গাইড

  4. ল্যাপটপ ওভারহিটিং রোধ: প্রমাণিত প্রতিরোধের কৌশল