反模式:使用 JavaScript 政策將資料記錄至第三方伺服器

您正在查看 Apigee Edge 說明文件。
查看 Apigee X 說明文件
資訊

Logging 是能有效偵錯問題的方法之一。您可以記錄與 API 要求相關的資訊 (例如標頭、表單參數、查詢參數和動態變數等),以供日後參考。資訊可在本機記錄於訊息處理器 (僅限 Apigee Edge for Private Cloud) 或第三方伺服器,例如 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 政策執行記錄程式碼可以增加 API 要求的延遲時間。
  • 並行要求可能會使訊息處理器對資源造成壓力,進而影響其他要求的處理程序。

最佳做法

  • 使用 MessageLogging 政策將/記錄資料傳輸至記錄檔伺服器或第三方記錄管理服務,例如 Sumo Logic、Splunk、Loggly 等。
  • 訊息記錄政策的最大優勢是,可以在訊息用戶端流程中加以定義,這個流程會在回應傳回給提出要求的用戶端應用程式後執行。
  • 在 Post Client 流程中定義這項政策有助於區隔記錄活動和要求/回應處理作業,進而避免延遲。
  • 如果您有特殊需求或理由想透過 JavaScript 記錄資料 (而非上述的「貼文用戶端」流程選項),就必須以非同步方式完成。換句話說,如果您使用 httpClient 物件,就必須確保 JavaScript「不會」導入 waitForComplete

其他資訊