反模式:使用 JavaScript 政策将数据记录到第三方服务器

<ph type="x-smartling-placeholder"></ph> 您正在查看 Apigee Edge 文档。
转到 Apigee X 文档
信息

日志记录是调试问题的高效方法之一。有关 API 的信息 所有请求(例如标头、表单参数、查询参数、动态变量等)都可以被记录为 稍后参考。这些信息可以记录在消息处理器本地(仅适用于私有云的 Apigee Edge)或 Sumo Logic、Splunk 或 Loggly 等第三方服务器。

反模式

在以下代码中,JavaScript 政策中的 httpClient 对象用于将数据记录到 Sumo 逻辑服务器。这意味着,日志记录过程实际上发生在 请求/响应处理。这种方法会适得其反,因为这会增加处理 从而增加整体延迟时间。

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 等
  • Message Logging 政策的最大优势在于,它可以在 客户端流,在响应发送回请求的客户端应用后执行。
  • 在 Post Client 流程中定义此政策有助于将日志记录活动和 从而避免延迟
  • 如果存在特定要求或有理由通过 JavaScript(而不是 客户端流程选项),则需要异步执行。也就是说, 如果您使用的是 httpClient 对象,则需要确保 JavaScript 实现 waitForComplete

深入阅读