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

您正在查看的是 Apigee Edge 文档。
转到 Apigee X 文档
信息

日志记录是调试问题的有效方法之一。有关 API 请求的信息(如标头、表单参数、查询参数、动态变量等)都可以记录下来以供日后参考。这些信息可记录到本地的消息处理器(仅限适用于私有云的 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 政策执行日志记录代码会增加 API 请求的延迟时间。
  • 并发请求可能会给消息处理器上的资源带来压力,从而对其他请求的处理产生负面影响。

最佳做法

  • 使用 MessageLogging 政策将数据转移/记录到日志服务器或第三方日志管理服务(如 Sumo Logic、Splunk、Loggly 等)。
  • 消息日志记录政策的最大优势在于,它可以在客户端后流中定义,该流会在将响应发送回发出请求的客户端应用后执行。
  • 在 Post Client 流程中定义此政策有助于将日志记录活动和请求/响应处理分离,从而避免延迟。
  • 如果存在特定要求或出于通过 JavaScript(不是上述的后客户端流程选项)进行日志记录的特殊要求或原因,则需要异步完成。也就是说,如果您使用的是 httpClient 对象,则需要确保 JavaScript 实现 waitForComplete

深入阅读