您正在查看的是 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