Fastify 是一个快速、开放式的 Web 框架,它通过使用异步方法和低开销的程序设计来提供出色的性能。Fastify 还提供了一个强大的日志系统,允许开发者配置和记录日志,以便监控和调试应用程序。在本文中,我们将重点介绍 Fastify 中的日志配置和实现方法。
日志配置
配置方法
Fastify 使用日志记录器来配置日志,例如 Pino。这个日志记录器允许开发者使用配置文件或程序代码进行配置,以便在应用程序运行时记录日志。
我们可以在 Fastify 中将一个或多个日志记录器附加到 app.log
实例中,如下所示:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- --- - ---------- ----- ---------- - ------------------ ----- ------------- - -------- ------------------------------ ------------ ----- ----- ---- -- - ---------------------- ------ - ------ ------- -- --- -----------------
在上面的代码中,我们使用 pinoLogger
创建了一个日志记录器,使用 fastifyLogger
附加到 app.log
实例中,这样就可以通过 app.log
记录日志了。在请求处理程序中,我们通过 app.log.info()
记录了请求信息。
配置选项
Fastify 支持的日志记录器包括 Pino、Winston、Bunyan 等。它们各自有一组不同的配置选项,允许开发者对日志输出格式、级别、转储等进行细粒度的控制。
以 Pino 为例,常用的配置选项如下:
level
:日志级别,默认为info
,可设置为fatal
、error
、warn
、info
、debug
、trace
。prettyPrint
:是否以可读性良好的格式输出日志,默认为false
。base
:附加到每个日志消息中的 JSON 对象,用于标识每条记录的来源。timestamp
:是否在每条记录中添加时间戳。transport
:日志输出的目标,可以是文件、syslog、Kafka 等。redact
:需要隐藏的字段和值,以数组形式提供。
具体配置项的使用方法可以参考官方文档。
日志实现
记录日志
在 Fastify 中,记录日志是通过 app.log
实例来完成的。我们可以使用不同级别的日志方法来记录不同严重程度的消息,例如:
app.log.fatal('致命错误'); app.log.error('错误'); app.log.warn('警告'); app.log.info('信息'); app.log.debug('调试'); app.log.trace('追踪');
如果在运行时需要指定日志级别,我们可以在启动应用程序时使用 --log-level
参数来设置。
格式化日志
在 Fastify 中,日志消息可以是任何类型的数据。当我们记录日志时,需要将数据作为参数传递给日志方法。例如:
const userDetails = { name: '张三', age: 18, gender: '男' }; app.log.info('用户为 %o', userDetails);
在上面的例子中,我们将用户详细信息作为参数传递给 app.log.info()
方法,使用 %o
占位符来格式化日志消息。这个占位符告诉日志记录器将 JavaScript 对象输出为格式良好的字符串。
除了 %o
占位符,还有其他常用的占位符,包括:
%s
:字符串。%d
:数字。%j
:JavaScript 对象(与%o
类似)。%t
:ISO8601 格式的日期时间字符串。
追踪日志
在 Fastify 中,可以使用 cls-hooked
模块来跟踪请求过程中产生的日志。 cls-hooked
模块通过创建与请求相关的上下文,让我们可以轻松地追踪请求处理器和相关中间件中产生的日志。
以 Pino 为例,在 Fastify 中启用 cls-hooked
:
-- -------------------- ---- ------- ----- --- - ---------- ----- ---------- - ------------------ ----- ------- - -------------------- ------------------------- ----------- ----------------------- -- ----- -- - ----------------- ----- ----- ---- -- - -------------------- ------ - ------ ------- -- --- ------- --- -----------------
在上面的代码中,我们在 Fastify 实例中使用 addHook()
方法启用了 pino-cls
中间件,这个中间件使用了 cls-hooked
模块。在请求处理器中,我们使用 app.log.info()
记录了新请求的信息。由于启用了 pino-cls
,这个日志信息将自动包含请求 ID。
总结
在本文中,我们对 Fastify 中的日志配置和实现进行了介绍。我们了解到,可以使用多种日志记录器来实现配置,可以使用不同级别和格式化选项来记录日志消息。我们还了解了 cls-hooked
模块,它可以让我们追踪请求过程中产生的日志。通过深入了解 Fastify 的日志系统,我们可以更好地监控和调试应用程序,提高开发效率和用户体验。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64cef7d5b5eee0b52567c43b