Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Ruby

लॉग प्रबंधन में महारत हासिल करें: अपठनीय गड़बड़ी से बचें

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

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

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

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

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

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

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) में एक लाइन जोड़ते हैं, तो आप Rails को अपने संदेशों को स्वचालित रूप से टैग करवा सकते हैं:

config.log_tags = [ :subdomain, :uuid ] 

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

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

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

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

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

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

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

  1. अपने पीसी से नकली  साइबर सिक्योरिटी  एंटीवायरस को सुरक्षित रूप से कैसे हटाएं अपने पीसी से नकली 'साइबर सिक्योरिटी' एंटीवायरस को सुरक्षित रूप से कैसे हटाएं

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

  1. Windows 10 PC से मैलवेयर सुरक्षित रूप से हटाने की चरण-दर-चरण मार्गदर्शिका Windows 10 PC से मैलवेयर सुरक्षित रूप से हटाने की चरण-दर-चरण मार्गदर्शिका

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

  1. लैपटॉप ओवरहीटिंग रोकें: सिद्ध बचाव तकनीकें लैपटॉप ओवरहीटिंग रोकें: सिद्ध बचाव तकनीकें

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