typescript - 如何编写 Apollo Server 插件来记录请求及其持续时间
问题描述
我很惊讶我找不到执行以下操作的库或示例:
我想要一个对服务器的每个请求的简单服务器日志,该日志将说明请求的查询或突变,以及完成请求所花费的时间
我知道有插件和扩展框架。但我不确定在两个回调之间保持状态的最佳做法是什么:requestDidStart
和willSendResponse
会吐出来的东西:
path="createAccountMutation" service=20ms
额外的功劳是显示有效载荷的大小
path="createAccountMutation" service=20ms bytes=355
希望在打字稿中看到解决方案
注意:我找到了apollo-log——但它没有请求持续时间
谢谢!
解决方案
requestDidStart
每个请求调用一次并返回请求生命周期挂钩的映射,因此您可以初始化挂钩之间存在的任何状态。
const LogPlugin = {
requestDidStart(requestContext) {
const start = Date.now()
let op
return {
didResolveOperation (context) {
op = context.operationName
},
willSendResponse (context) {
const stop = Date.now()
const elapsed = stop - start
const size = JSON.stringify(context.response).length * 2
console.log(
`Operation ${op} completed in ${elapsed} ms and returned ${size} bytes`
)
}
}
},
}
推荐阅读
- postgresql - 带有 Postgres 的 Mac 上的 Docker 卷
- wpf - 在 WPF 中绑定“绑定”类型的属性的解决方法
- powershell - 从无法按预期工作的模块添加管理单元
- python - 如何实现行星受到其他行星引力的影响,而不仅仅是太阳?
- python - 使用 api 从谷歌驱动器下载文件(名称错误:名称“服务”未定义)
- facebook-graph-api - Facebook graph api 公共页面数据
- c# - 使用 DI 引导包含多种模块类型的 ASP.NET Core 2.1 应用程序
- docker - docker build - 避免只在构建时添加文件
- python - 根据数据框列中的某个值获取所有数据框
- java - @Embeddedid,@Embeddable 等价于 C#