Fastify 中的请求日志记录

阅读时长 5 分钟读完

介绍

Fastify 是一个快速而低开销的 web 框架,适用于构建高效的 web 应用程序。它旨在为 Node.js 应用带来大幅度的提升,包括已知的安全问题和性能相关问题。其中请求日志记录是其中重要的环节之一,它可以帮助我们更准确地追踪请求和错误原因,定位根本问题,并为以后的维护和优化提供帮助。

本文主要介绍 Fastify 中的请求日志记录,包括 Fastify 自带的默认日志记录器,自定义日志记录器等。

Fastify 自带默认日志记录器

Fastify 中有一个默认的日志记录器(fastify.logger()),它预先设置了一组格式和语义,用于记录请求、服务器错误和日志级别等信息。默认的记录格式如下:

其中,各字段含义如下:

  • level:日志级别,范围为 1060,默认为 30
  • time:时间戳,表示记录事件的时间戳,使用 Date.getTime() 格式。
  • pid:当前进程的 ID。
  • hostname:主机名,默认从 require('os').hostname() 获得。
  • reqId:请求 ID,唯一地标识一个请求。
  • res:在请求完成后,响应对象的状态信息。
  • responseTime:处理请求所花费的时间,单位为毫秒。
  • msg:包含所有信息的 JSON 字符串。

默认日志级别为 30,它表示 “信息”。如果以比 30 更低的级别呈现日志消息,将不会被记录。如果以比 30 更高的级别呈现日志消息,它将被记录在对应的日志级别下。

对于需要自定义级别和格式的,可以使用以下方式:

在此代码中,我们创建了一个 Fastify 实例,并定义了一个名为 logger 的配置项。console 条目将使用 prettyPrint 的选项来记录到控制台中。在这个例子中,日志级别为 trace,因此它将记录 errorwarninfodebugtrace 级别的所有消息。

自定义日志记录器

如果需要自定义日志记录器,则可以使用 Fastify 提供的 pino 模块。pino 是一个快速的、无依赖的日志系统,其能够被任何 JavaScript 应用程序集成。

在 Fastify 中使用 pino 记录器直接是一种可行的方法,因为 fastify.logger() 背后的日志记录器正是使用 pino 来进行请求记录。在此,我们将使用 pino 来创建一个新的日志记录器,并将其与 Fastify 的实例进行集成。下面是示例代码:

在这个例子中,我们创建了一个 Fastify 实例,并使用 pino 模块创建了一个新的日志记录器,然后将其传递给了 Fastify 实例。level 配置选项将日志级别设置为 info,而 base 则是一个可选对象,用于添加对于所有日志消息通用的元数据。在这个例子中,我们向 base 配置选项中添加了一个进程 ID(pid)。

接下来,使用 fastify.log.info() 或者 fastify.log.error() 等方法,就可以像使用默认日志记录器一样使用自定义记录器了。

上面的例子中,我们添加了 fastify.log.info() 方法,用于记录请求到 / 的信息。可以根据需要添加更多的消息种类。此外,在没有设置 reqId 的情况下,pino 将为每个记录分配一个 UUID。

结论

日志记录是 web 应用程序的必要组成部分,可以验证代码、调试错误和跟踪应用程序性能。在 Fastify 中,我们可以使用默认的日志记录器来记录请求,也可以通过使用自定义日志记录器来更好地满足我们自身的需求。

最后,在进行日志记录时,必须了解日志级别和角色,并且能够在日志记录中准确、一致地使用不同的事件类型和标签。这样可以最大程度地提高日志的可靠性和实用性。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/677646596d66e0f9aa1c1532

纠错
反馈