एंटीपैटर्न: JavaScript नीति का इस्तेमाल करके, तीसरे पक्ष के सर्वर में डेटा लॉग करें

यहां Apigee Edge से जुड़े दस्तावेज़ देखे जा रहे हैं.
Apigee X
से जुड़े दस्तावेज़ पर जाएं.
info

लॉगिंग, समस्याओं को डीबग करने का एक असरदार तरीका है. एपीआई के अनुरोध के बारे में जानकारी लॉग की जा सकती है. जैसे, हेडर, फ़ॉर्म पैरामीटर, क्वेरी पैरामीटर, डाइनैमिक वैरिएबल वगैरह. इस जानकारी को बाद में रेफ़रंस के तौर पर इस्तेमाल किया जा सकता है. जानकारी को मैसेज प्रोसेसर पर स्थानीय तौर पर लॉग किया जा सकता है. यह सुविधा सिर्फ़ Apigee Edge for Private Cloud के लिए उपलब्ध है. इसके अलावा, Sumo Logic, Splunk या Loggly जैसे तीसरे पक्ष के सर्वर पर भी जानकारी लॉग की जा सकती है.

ऐंटीपैटर्न

नीचे दिए गए कोड में, httpClient ऑब्जेक्ट का इस्तेमाल, JavaScript नीति में मौजूद डेटा को Sumo Logic सर्वर पर लॉग करने के लिए किया गया है. इसका मतलब है कि लॉगिंग की प्रोसेस, अनुरोध/जवाब की प्रोसेसिंग के दौरान होती है. यह तरीका सही नहीं है, क्योंकि इससे प्रोसेसिंग में लगने वाला समय बढ़ जाता है. इस वजह से, कुल मिलाकर इंतज़ार का समय भी बढ़ जाता है.

LogData_JS:

<!-- /antipatterns/examples/1-4.xml -->
<Javascript async="false" continueOnError="false" enabled="true" timelimit="2000" name="LogData_JS">
  <DisplayName>LogData_JS</DisplayName>
  <ResourceURL>jsc://LogData.js</ResourceURL>
</Javascript>

LogData.js:

<!-- /antipatterns/examples/1-5.xml -->
var sumoLogicURL = "...";
httpClient.send(sumoLogicURL);
waitForComplete();

यहां गड़बड़ी की वजह, waitForComplete() को कॉल करना है. इससे कॉलर के ऑपरेशन तब तक रुक जाते हैं, जब तक लॉगिंग की प्रोसेस पूरी नहीं हो जाती. इस कॉल को हटाकर, इसे एसिंक्रोनस बनाना एक मान्य पैटर्न है.

असर

  • JavaScript नीति के ज़रिए लॉगिंग कोड को लागू करने से, एपीआई के अनुरोध में लगने वाला समय बढ़ जाता है.
  • एक साथ कई अनुरोध करने से, मैसेज प्रोसेसर के संसाधनों पर दबाव पड़ सकता है. इससे अन्य अनुरोधों की प्रोसेसिंग पर भी बुरा असर पड़ सकता है.

सबसे सही तरीका

  • डेटा को लॉग सर्वर या तीसरे पक्ष की लॉग मैनेजमेंट सेवाओं पर ट्रांसफ़र/लॉग करने के लिए, MessageLogging नीति का इस्तेमाल करें. जैसे, Sumo Logic, Splunk, Loggly वगैरह.
  • MessageLogging नीति का सबसे बड़ा फ़ायदा यह है कि इसे Post Client Flow में तय किया जा सकता है. यह नीति, अनुरोध करने वाले क्लाइंट ऐप्लिकेशन को जवाब भेजे जाने के बाद लागू होती है.
  • Post Client Flow में इस नीति को तय करने से, लॉगिंग की गतिविधि और अनुरोध/जवाब की प्रोसेसिंग को अलग-अलग किया जा सकता है. इससे इंतज़ार का समय कम हो जाता है.
  • अगर JavaScript के ज़रिए लॉगिंग करने की कोई खास ज़रूरत या वजह है, तो इसे एसिंक्रोनस तरीके से किया जाना चाहिए. इसके लिए, ऊपर बताए गए Post Client Flow के विकल्प का इस्तेमाल नहीं किया जाना चाहिए. दूसरे शब्दों में, अगर httpClient ऑब्जेक्ट का इस्तेमाल किया जा रहा है, तो आपको यह पक्का करना होगा कि JavaScript में NOT waitForComplete लागू किया गया हो

इस बारे में और पढ़ें