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

Apigee Edge दस्तावेज़ देखा जा रहा है.
Apigee X दस्तावेज़ पर जाएं.
जानकारी

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

एंटीपैटर्न

नीचे दिए गए कोड में, JavaScript नीति के httpClient ऑब्जेक्ट का इस्तेमाल, डेटा को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 नीति की मदद से लॉगिंग कोड चलाने से, एपीआई अनुरोध के लिए इंतज़ार का समय बढ़ जाता है.
  • एक साथ किए जाने वाले अनुरोधों की वजह से, मैसेज प्रोसेसर पर मौजूद संसाधनों पर दबाव पड़ सकता है. इस वजह से, अन्य अनुरोधों की प्रोसेसिंग पर बुरा असर पड़ सकता है.

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

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

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