ट्रैक
/
Elixir
Elixir
/
अभ्यास
/
लॉग लेवल
लॉग लेवल

लॉग लेवल

सीखने का अभ्यास

परिचय

एटम

Elixir का atom टाइप एक निश्चित स्थिरांक को दर्शाता है। एटम की वैल्यू बस उसका अपना नाम होती है। इससे हमें डेटा के साथ काम करने का एक ऐसा तरीका मिलता है जो टाइप की दृष्टि से सुरक्षित है। एटम को इस तरह बनाया जा सकता है:

# All atoms are preceded with a ':' then follow with alphanumeric snake-cased characters
variable = :an_atom

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

Cond

अक्सर हमें ऐसा कोड लिखना होता है जो किसी शर्त के आधार पर अलग-अलग रास्ते चुन सके। Elixir में ऐसा करने के कई तरीके हैं, लेकिन सबसे आसान तरीकों में से एक है cond/1 का इस्तेमाल करना।

सबसे सरल रूप में, cond एक या अधिक शाखाओं में से उस पहले मार्ग पर चलता है जो true निकलता है:

cond do
  x > 10 -> :this_might_be_the_way
  y < 7 -> :or_that_might_be_the_way
  true -> :this_is_the_default_way
end

अगर कोई भी मार्ग true न निकले, तो रनटाइम एक एरर उठाता है।

निर्देश

आप एक ऐसा सिस्टम चला रहे हैं जिसमें कुछ एप्लिकेशन बहुत सारे लॉग बनाते हैं। आप एक छोटा प्रोग्राम लिखना चाहते हैं जो इन लॉग को इकट्ठा करे और उनकी गंभीरता के स्तर के अनुसार उन्हें लेबल दे। आपके सिस्टम के सभी एप्लिकेशन एक ही लॉग कोड इस्तेमाल करते हैं, लेकिन कुछ पुराने एप्लिकेशन सभी कोड का समर्थन नहीं करते।

लॉग कोड लॉग लेबल पुराने एप्लिकेशन में समर्थित?
0 trace नहीं
1 debug हाँ
2 info हाँ
3 warning हाँ
4 error हाँ
5 fatal नहीं
अन्य / असमर्थित unknown -

1. लॉग लेबल तय कीजिए

LogLevel.to_label/2 फंक्शन बनाइए। यह एक पूर्णांक कोड और एक बूलियन फ्लैग लेता है, जो बताता है कि लॉग किसी पुराने एप्लिकेशन से आया है या नहीं, और लॉग लाइन के लेबल को एक एटम के रूप में लौटाता है।

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

LogLevel.to_label(0, false)
# => :trace

LogLevel.to_label(0, true)
# => :unknown

2. अलर्ट भेजिए

जब कुछ अनपेक्षित होता है, तो किसी को सूचना देनी पड़ती है।

LogLevel.alert_recipient/2 फंक्शन बनाइए, जो तय करता है कि अलर्ट किसे भेजा जाना चाहिए। यह फंक्शन एक पूर्णांक कोड और एक बूलियन फ्लैग लेता है, जो बताता है कि लॉग किसी पुराने एप्लिकेशन से आया है या नहीं, और प्राप्तकर्ता का नाम एक एटम के रूप में लौटाता है।

पिछले टास्क वाले LogLevel.to_label/2 फंक्शन का इस्तेमाल कीजिए। अगर लॉग लेबल error या fatal है, तो अलर्ट ops टीम को भेजिए। अगर आपको किसी पुराने सिस्टम से unknown लेबल वाला लॉग मिलता है, तो अलर्ट dev1 टीम को भेजिए; बाकी unknown लेबल dev2 टीम को भेजे जाने चाहिए। बाकी सभी लॉग लेबल को false लौटाकर छोड़ा जा सकता है।

LogLevel.alert_recipient(-1, true)
# => :dev1

LogLevel.alert_recipient(0, false)
# => false
GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
Elixir Exercism

लॉग लेवल शुरू करने के लिए तैयार हैं?

Exercism पर साइन अप कीजिए और Elixir को 58 कॉन्सेप्ट168 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।