简介
Hapi.js 是一个现代化的 Node.js 应用程序框架,开发人员可以使用它来快速构建跨平台的 Web 服务。Pino 则是一个高性能、低内存占用的日志记录器。在本文中,我们将会介绍如何使用 Pino 作为 Hapi.js 框架的默认日志记录器,以及如何在 Hapi.js 应用程序中配置和使用 Pino。
安装
首先,我们需要安装 Hapi.js 和 Pino:
npm install --save hapi pino
集成 Pino 到 Hapi.js 中
为了将 Pino 集成到 Hapi.js 中,需要在初始化 Hapi.js 应用程序时,使用 pino-http 插件作为默认的日志记录器:
-- -------------------- ---- ------- ----- ---- - ---------------- ----- ---- - ---------------- ----- -------- - --------------------- ----- ------ - --- -------------- ------------------- ----- ---- --- ----- ------ - ------ ----- -------- ------ --------------------- -- ------ --- ----------------- --------- --------- -------- - ------------ -------------------- --- ------------- ------- ------ - -- ----- -- - -- ----- - --------------------- -- ---- --------- ----- - --- --------------- -- - ------------------- ------- --- --------------------- ---
在上面的例子中,我们初始化了 Hapi.js 应用程序并创建了一个 pino 实例。然后,我们使用 hapi-pino 插件将 pino 实例作为流传递给 Hapi.js,以便能够捕获和记录日志事件。
我们还可以使用 Hapi.js 日志方法来创建自定义日志事件:
server.log(['info', 'my-namespace'], 'Hello, world!');
在上述的例子中,我们创建了一个名为 'my-namespace' 的命名空间,并将其传递给日志方法。这样,我们可以在记录的日志事件中按名称对日志进行分组。
配置 Pino
我们可以通过传递配置对象来自定义 Pino 实例的行为。以下是常用的选项:
level
:设置日志输出的最低级别,例如:'info'
,'warn'
,'error'
。prettyPrint
:指定是否将日志输出格式化为易于阅读的形式。serializers
:对象或函数,用于宏观、细节和速度级别的序列化。
下面是一个示例,展示了如何使用上述选项来自定义 Pino 实例:
const logger = pino({ name: 'myapp', level: process.env.LOG_LEVEL || 'info', prettyPrint: process.env.NODE_ENV !== 'production', serializers: { err: pino.stdSerializers.err } });
在上述示例中,我们使用了一个名为 err
的标准序列化器来序列化错误对象。这将使得记录的日志事件具有可读性更好的错误消息。
我们也可以使用 Hapi.js 的 Configure 方法来动态配置应用程序的日志级别:
server.log(['info'], 'This log message will be displayed.'); server.on('request', (request, event, tags) => { if (tags.error) { server.log(['error'], 'An error occurred', request.id); } });
当我们生成日志事件时,Hapi.js 将自动为请求设置一个唯一的 id。此 id 是可选的,但可以帮助我们更好地跟踪事件。
结论
使用 Pino 作为 Hapi.js 的日志记录器,可以有效的记录和跟踪应用程序运行时的行为。本文介绍了如何将 Pino 集成到 Hapi.js 中,并展示了如何在 Hapi.js 应用程序中配置和使用 Pino。
如果你也正在使用 Hapi.js,那么我们强烈建议你使用 Pino 作为你的默认日志记录器。 Pino 既高效又轻量,并且易于使用和配置。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67491fb54085ca58d2a8cdd1