温馨提示:本文翻译自stackoverflow.com,查看原文请点击:typescript - How do I write a Apollo Server plugin to log the request and its duration
apollo apollo-server graphql typescript

typescript - 如何编写Apollo服务器插件以记录请求及其持续时间

发布于 2020-04-08 00:23:35

我很惊讶我找不到执行以下操作的库或示例:

我想要向服务器发送的每个请求的简单服务器日志,其中将说明请求的查询或变异以及完成请求所花费的时间

我知道有插件和扩展框架。但我最好的做法是保持两个回调之间的状态不知道是什么:requestDidStartwillSendResponse

会吐出来的东西:

path="createAccountMutation" service=20ms

额外的功劳将是显示有效载荷的大小

path="createAccountMutation" service=20ms bytes=355

希望看到打字稿中的解决方案

注意:我找到了apollo-log,但是它没有请求持续时间

谢谢!

查看更多

提问者
Jonathan
被浏览
76
Daniel Rearden 2020-01-30 23:34

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`
        )
      }
    }
  },
}

请注意,这仅适用于每个请求。如果您需要更细化的内容(例如跟踪单个字段需要花费多长时间),则需要使用指令中间件