Elm:
लॉगिंग
कैसे करें:
एल्म की आर्किटेक्चर साइड इफेक्ट्स जैसे कि लॉगिंग को सीधे सपोर्ट नहीं करता—आप इसे कमांड्स के माध्यम से हैंडल करते हैं, जो कि आपके एप्लिकेशन की आर्किटेक्चर का एक हिस्सा हैं। शैक्षिक उद्देश्यों के लिए, आइए देखें कि आप पोर्ट्स के माध्यम से जावास्क्रिप्ट को संदेश भेजकर लॉगिंग का अनुकरण कैसे कर सकते हैं।
सबसे पहले, आप एक पोर्ट मॉड्यूल को परिभाषित करेंगे:
port module Logger exposing (..)
-- जावास्क्रिप्ट को लॉग्स भेजने के लिए एक पोर्ट को परिभाषित करता है
port log : String -> Cmd msg
आपके Main.elm
में, आप log
पोर्ट का उपयोग करके एक लॉग मैसेज भेजेंगे:
import Logger exposing (log)
update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
case msg of
AnEvent ->
-- यहाँ आपके मॉडल के कुछ अपडेट्स
( updatedModel, log "AnEvent occurred." )
AnotherEvent ->
-- यहाँ अन्य मॉडल अपडेट्स
( anotherUpdatedModel, log "AnotherEvent occurred." )
जावास्क्रिप्ट की तरफ, आप आने वाले लॉग मैसेजेस को हैंडल करने के लिए log
पोर्ट की सदस्यता लेंगे:
var app = Elm.Main.init({ /* ... */ });
app.ports.log.subscribe(function(message) {
console.log(message);
});
इसके बाद जावास्क्रिप्ट कंसोल में नमूना आउटपुट कुछ इस प्रकार होगा:
AnEvent occurred.
AnotherEvent occurred.
गहराई से समझना
पारंपरिक रूप से, पायथन या जावा जैसी भाषाओं में, लॉगिंग एक लॉगिंग लाइब्रेरी का उपयोग करके की जाती है, जो डिबग, इंफो, वार्निंग, एरर और क्रिटिकल जैसे विभिन्न स्तरों पर संदेश लॉग करने के लिए एक सरल API प्रदान करती है।
एल्म, जो कि शुद्धता और अपरिवर्तनीयता पर ध्यान केंद्रित करता है, इस प्रकार की सीधी लॉगिंग प्रदान नहीं करता, क्योंकि IO या साइड इफेक्ट का कोई भी प्रकार एल्म आर्किटेक्चर के माध्यम से अलग से मैनेज किया जाता है।
जब आपको एल्म में पूरी तरह से सुविधा युक्त लॉगिंग की आवश्यकता होती है, तो आप आम तौर पर बाहरी जावास्क्रिप्ट टूल पर निर्भर करते हैं। पोर्ट्स, जैसा कि ऊपर दिखाया गया है, इन उपकरणों के लिए पुल का काम करते हैं। डीबग मॉड्यूल एक और विकल्प है, लेकिन इसका मतलब केवल विकास के लिए है और प्रोडक्शन लॉगिंग के लिए नहीं।
पोर्ट्स के अतिरिक्त, प्रोग्रामर्स अक्सर एल्म के कंपाइलर संदेशों और रनटाइम डिबगिंग की सुविधाओं, जैसे कि Debug.log
का उपयोग करते हैं, जिसे आप अपने कोड में मानों का पता लगाने के लिए डाल सकते हैं। यह एक अभिव्यक्ति को लपेटता है और इसके आउटपुट को कंसोल पर इस प्रकार लॉग करता है:
view model =
Debug.log "Model Debug" model
-- यहाँ आपका व्यू कोड
हालांकि, यह भी प्रोडक्शन के लिए मतलब नहीं है। टूल्स जैसे कि elm-logger पोर्ट्स के ऊपर कुछ अमूर्तताएं प्रदान करते हैं, हालांकि ये भी उत्पादन की तुलना में विकास के लिए अधिक मतलब रखते हैं।
साथ ही देखें
- एल्म पोर्ट्स: https://guide.elm-lang.org/interop/ports.html
- एल्म
Debug
: https://package.elm-lang.org/packages/elm/core/latest/Debug - लॉगिंग पर एल्म वार्तालाप: https://discourse.elm-lang.org/t/elm-and-logging/546
- जावास्क्रिप्ट कंसोल API: https://developer.mozilla.org/en-US/docs/Web/API/Console
- elm-logger पैकेज: https://package.elm-lang.org/packages/arkgil/elm-logger/latest/