在前端开发中,我们经常需要记录应用程序的运行状态和日志信息,以便于排除错误和优化性能。为了方便开发者记录和管理日志信息,npm 社区推出了一个便捷的日志管理工具 pino-http-logger,它可以帮助我们将 HTTP 请求和响应的信息记录到日志中。
pino-http-logger 简介
pino-http-logger 是一个高性能、轻量级的日志记录工具,它是基于 pino 库开发的。与其它日志库不同的是,它具有以下优点:
- 高性能:pino-http-logger 采用了异步 I/O 操作,可以在不阻塞进程的情况下记录大量的日志信息。
- 轻量级:pino-http-logger 仅包含了 HTTP 请求和响应的记录功能,不会占用太多的系统资源。
- 易用性:pino-http-logger 的 API 设计简洁易懂,学习和使用成本低。
安装 pino-http-logger
使用 npm 包管理器,可以很方便地安装 pino-http-logger:
npm install pino-http-logger
使用 pino-http-logger
使用 pino-http-logger 的过程很简单,只需要在 Express 应用程序中添加中间件即可。以下示例代码演示了如何添加 pino-http-logger 中间件:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- -------------- - ---------------------------- ----- --- - ---------- -- -- ---------------- --- -------------------------- -- ---- ------------ ----- ---- -- - --------------- --------- --- ---------------- -- -- - ---------------- --------- -- ---- -------- ---
上述代码中,我们首先导入了 express 模块和 pino-http-logger 模块。然后,我们创建了一个 Express 应用程序,并添加了 pino-http-logger 中间件。最后,我们定义了一个简单的路由,并启动了应用程序监听 3000 端口的 HTTP 请求。
当我们访问 http://localhost:3000/ 时,pino-http-logger 就会自动记录 HTTP 请求和响应的信息到日志中。例如,以下是 pino-http-logger 记录的一条 HTTP 请求的日志信息:
{"level":30,"time":1577879419294,"msg":"request","req":{"url":"/","method":"GET","headers":{"host":"localhost:3000","connection":"keep-alive","cache-control":"max-age=0","user-agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36","upgrade-insecure-requests":"1","accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9","sec-fetch-site":"none","sec-fetch-mode":"navigate","sec-fetch-user":"?1","sec-fetch-dest":"document","accept-encoding":"gzip, deflate, br","accept-language":"en-US,en;q=0.9,zh-CN;q=0.8,zh-TW;q=0.7,zh;q=0.6","cookie":"_ga=GA1.1.2116024251.1578496533; _gid=GA1.1.304920731.1578496533; io=34zgzgjIoiD8j60dAAAC; Webstorm-1f159c3b=9e746f74-1184-4bc0-89b8-1c4f1de15463; lang=en; connect.sid=s%3A5j5zAoTp5r5p0aNUitoJvb38UhGAIXZJ.Wa0hVJ2KGXYyfcq3l2E1CsU6wDDQN6x%2FwcZsjOjOzgA; side-bar-folded-state-sidebar=0.7916811693007258"},"remoteAddress":"127.0.0.1","remotePort":54314},"res":{"statusCode":200,"headers":{"content-type":"text/html; charset=utf-8","content-length":"12","etag":"W/\"c-Ss4vK57unODA5re5u5gms/n5yro\"","date":"Tue, 17 Nov 2020 10:30:19 GMT","connection":"keep-alive"},"responseTime":3.191441029548645e-5},"responseTime":0.067607882}
配置 pino-http-logger
pino-http-logger 支持多种配置选项,可以根据实际需求来设置。以下是一些常用的配置选项:
logger
:设置 pino 实例,用于记录日志。默认情况下,会自动创建一个 pino 实例。genReqId
:用于生成唯一的请求 ID。默认情况下,会使用 uuid 库生成 UUID。excludeHeaders
:排除 HTTP 请求头中不需要记录的字段。serializers
:自定义序列化函数,用于将对象转换成字符串。默认情况下,pino-http-logger 会自动处理 HTTP 请求和响应对象的序列化。prettyPrint
:输出漂亮格式的日志信息,便于查看和调试。
例如,以下代码演示了如何配置 pino-http-logger:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- -------------- - ----------------------------- ------- ------ ------ ------- ------------ ----- ----- ----- --- --------- ----- -- - ------ ------------------------------- -- ---------- -- --------------- --------------- --- ----- --- - ---------- ------------------------ ------------ ----- ---- -- - --------------- --------- --- ---------------- -- -- - ---------------- --------- -- ---- -------- ---
在上述代码中,我们首先定义了一个自定义的 pino 日志记录器,用于输出漂亮格式的日志信息。然后,我们使用 genReqId 方法指定了一个自定义的请求 ID 生成函数,使得请求 ID 从 HTTP 请求头部的 x-correlation-id 字段中获取。最后,我们使用 excludeHeaders 字段排除了 HTTP 请求头中的 user-agent 字段,以便减轻输出日志的负担。
总结
本文介绍了 npm 包 pino-http-logger 的使用方法和配置选项,希望能够帮助读者了解如何记录和管理 HTTP 请求和响应的信息。在实际开发中,选择合适的日志管理工具可以帮助我们更好地理解和调试应用程序,并提高开发效率。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/600558ef81e8991b448d6426