前言
在 Web 开发中,日志是非常重要的一部分。它可以帮助我们快速定位问题,监控系统运行状况,以及分析用户行为等。在 Node.js 中,Winston 是一个非常流行的日志库,它提供了丰富的功能和灵活的配置,可以满足各种日志需求。而 Hapi 则是一个优秀的 Node.js Web 框架,它提供了丰富的插件和工具,可以帮助我们快速搭建 Web 应用。本文将介绍如何在 Hapi 框架中使用 @hapi/good-winston 插件来记录 Winston 日志。
@hapi/good-winston 插件介绍
@hapi/good-winston 是 Hapi 框架中的一个插件,它可以将 Hapi 应用程序的请求和响应日志输出到 Winston 日志库中。该插件基于 good 插件框架,可以与其他 good 插件一起使用,如 good-console、good-file 等。@hapi/good-winston 插件提供了丰富的配置选项,可以满足各种日志需求。
以下是 @hapi/good-winston 插件的安装命令:
npm install @hapi/good-winston
使用 @hapi/good-winston 插件记录日志
在 Hapi 应用程序中使用 @hapi/good-winston 插件非常简单。我们只需要在创建服务器时,将该插件作为一个日志选项传递进去即可。以下是一个示例代码:
const Hapi = require('@hapi/hapi'); const GoodWinston = require('@hapi/good-winston'); const Winston = require('winston'); // 创建 Winston 日志实例 const logger = Winston.createLogger({ level: 'info', transports: [ new Winston.transports.Console(), new Winston.transports.File({ filename: 'app.log' }) ] }); // 创建 Hapi 服务器实例 const server = Hapi.server({ port: 3000, host: 'localhost', routes: { log: { collect: true, // 启用日志收集 config: { // 将 good-winston 插件作为日志选项传递进去 reporters: { winston: [ { module: '@hapi/good-winston', args: [{ logger }] } ] } } } } }); // 添加路由 server.route({ method: 'GET', path: '/', handler: (request, h) => { logger.info('Hello, world!'); return 'Hello, world!'; } }); // 启动服务器 async function start() { await server.start(); console.log(`Server running at: ${server.info.uri}`); } start();
在上面的代码中,我们首先创建了一个 Winston 日志实例,然后创建了一个 Hapi 服务器实例。在创建服务器时,我们将 @hapi/good-winston 插件作为一个日志选项传递进去,并将我们创建的 Winston 日志实例作为参数传递给该插件。最后,我们添加了一个简单的路由,并在该路由中使用我们的 Winston 日志实例记录了一条日志。
配置 @hapi/good-winston 插件
@hapi/good-winston 插件提供了丰富的配置选项,可以满足各种日志需求。以下是 @hapi/good-winston 插件的配置选项:
format
:日志格式化函数,可以自定义日志格式。levels
:日志级别配置,可以自定义日志级别。ops
:是否记录 Hapi 应用程序的运行统计信息。request
:是否记录请求信息。response
:是否记录响应信息。error
:是否记录错误信息。log
:是否记录 Hapi 应用程序的日志信息。wreck
:是否记录 Wreck 库的请求和响应信息。extendedRequests
:是否记录扩展的请求信息,如请求耗时、请求体大小等。blacklist
:黑名单配置,可以屏蔽一些敏感信息。metadata
:元数据配置,可以添加一些自定义元数据。
以下是一个示例代码,展示了如何使用 @hapi/good-winston 插件的配置选项:
const Hapi = require('@hapi/hapi'); const GoodWinston = require('@hapi/good-winston'); const Winston = require('winston'); // 创建 Winston 日志实例 const logger = Winston.createLogger({ level: 'info', transports: [ new Winston.transports.Console(), new Winston.transports.File({ filename: 'app.log' }) ] }); // 创建 Hapi 服务器实例 const server = Hapi.server({ port: 3000, host: 'localhost', routes: { log: { collect: true, // 启用日志收集 config: { // 将 good-winston 插件作为日志选项传递进去,并配置插件选项 reporters: { winston: [ { module: '@hapi/good-winston', args: [ { logger, format: 'YYYY-MM-DD HH:mm:ss.SSS', levels: { response: 'info', request: 'info', error: 'error' }, ops: { interval: 1000 }, request: { format: 'method,path,query,statuscode', headers: true, separator: ';' }, response: { format: 'statuscode', headers: true, separator: ';' }, error: { format: 'stack,trace' }, log: '*', extendedRequests: true, blacklist: ['password'], metadata: { app: 'myapp', version: '1.0.0' } } ] } ] } } } } }); // 添加路由 server.route({ method: 'GET', path: '/', handler: (request, h) => { logger.info('Hello, world!'); return 'Hello, world!'; } }); // 启动服务器 async function start() { await server.start(); console.log(`Server running at: ${server.info.uri}`); } start();
在上面的代码中,我们在创建服务器时,将 @hapi/good-winston 插件作为一个日志选项传递进去,并配置了插件的各种选项。例如,我们自定义了日志格式、日志级别、运行统计信息、请求信息、响应信息、错误信息、日志信息、扩展请求信息、黑名单、元数据等。这些选项可以根据实际需求进行配置。
总结
本文介绍了如何在 Hapi 框架中使用 @hapi/good-winston 插件来记录 Winston 日志。我们首先介绍了 @hapi/good-winston 插件的安装和使用方法,然后介绍了插件的各种配置选项。通过本文的学习,读者可以了解如何在 Hapi 应用程序中使用 Winston 日志库,并掌握如何使用 @hapi/good-winston 插件来记录日志。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65c3100badd4f0e0ffd1ed1c