您正在查看 Apigee Edge 文档。
前往 Apigee X 文档。 信息
日志记录是调试问题的一种高效方法。有关 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 等)。
- Message Logging 政策的最大优势在于,它可以在 Post Client Flow 中定义,该流程会在响应发送回发出请求的客户端应用后执行。
- 在 Post Client 流中定义此政策有助于分离日志记录活动和请求/响应处理,从而避免延迟。
- 如果存在通过 JavaScript 进行日志记录的特定要求或原因(而不是上述 Post Client 流程选项),则需要异步完成。换句话说,如果您使用的是
httpClient对象,则需要确保 JavaScript 不实现waitForComplete