问题描述
在使用 Fastify 构建 API 时,我们通常需要记录访问日志以便于观察和分析 API 的调用情况。而 Fastify 提供了 fastify-log
模块来方便我们记录日志。
-- -------------------- ---- ------- ----- ------- - --------------------- ----- --- - ----------------------- ---------------------- ---------------- ----- --------- ------ -- - ------------------------------------------- ------------ ------ ------- --- ---
上面的代码中,我们通过引入 fastify-log
模块来注册日志插件。在 fastify.get()
函数内部调用了 console.log()
方法来打印日志。但是在实际测试中,我们却发现这种方式只能在控制台上打印日志,不能输出到文件中,这对于生产环境的日志记录显然是不够安全和稳定的。
原因分析
这个问题的原因在于 Fastify 日志功能的默认行为不是把日志输出到文件中,而是直接输出到控制台上。要想把日志输出到文件中,需要通过配置才能实现。
解决方案
方案一:通过 pino
来输出日志
Fastify 内部集成了 pino
日志库,我们可以借助 pino
从控制台输出日志到文件中,而不需要使用 console.log()
。修改上面的代码:
-- -------------------- ---- ------- ----- ------- - --------------------- ----- -- - -------------- ----- ---- - ---------------- ----- --- - ----------------------- ----- ---- - ---------------- ---------------------- ----- --------------- - ----------------------------------------- -------------- - ------ --- --- ----------- - ------ ------ ------ -- ----------------- ---------------- ----- --------- ------ -- - ------------------------------------------------ ------------ ------ ------- --- ---
在上面的代码中,我们创建了一个输出流 accessLogStream
,并将其传入到 pino
的构造函数中,以此来输出日志到文件中。在 API 中使用 fastify.log
来记录日志。
方案二:使用 fastify-pino-logger
来输出日志
除了自己使用 pino
进行日志输出外,我们还可以使用 Fastify 社区提供的 fastify-pino-logger
模块来快速地输出日志。
-- -------------------- ---- ------- ----- ------- - --------------------- ----- -- - -------------- ----- ---- - ---------------- ----- ------ - ------------------------------- ------------------------ - ------ ------- ------------ ----- ------- ----------------------------------------- -------------- - ------ --- --- --- ---------------- ----- --------- ------ -- - ------------------------------------------------ ------------ ------ ------- --- ---
上面的代码中,我们通过使用 fastify-pino-logger
模块注册一个日志插件,并传入一些配置项来实现日志输出。要想输出到文件中,只需要将输出流传入到配置项中即可。
总结
在日常开发中,记录日志是必不可少的一项任务,尤其是在生产环境下。本文介绍了两种方法来解决 Fastify 日志打印失效的问题:通过 pino
来输出日志或使用 fastify-pino-logger
模块来快速实现日志输出。希望本文能够对你有所帮助,使你能够更好地管理和记录自己的日志。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64e2f2dcf6b2d6eab3e3f913