Hapi 中使用 Good 插件实现日志打印和收集

随着 Web 应用的专业化和复杂化,日志已经成为 Web 开发中不可或缺的一部分。在前端开发中,我们也需要记录运行时的日志信息,以便发现和解决我们的代码问题。Hapi 框架是一个流行的 Node.js 框架,它有很多插件可以帮助我们实现这样的功能。其中,Good 插件可以帮助我们记录并收集运行时日志信息。

Good 插件简介

Good 是一个 Hapi 插件,用于记录和收集服务器运行时的日志信息。它可以记录访问日志、错误日志、请求响应时间等信息,并将这些信息发送到多种不同的日志系统,如 console、File 等。Good 插件支持多种格式的日志信息,包括 JSON、CSV 和文本等。它也支持自定制日志格式、筛选器和发布器等特性。

Good 插件的使用有两个方面:插件配置和插件注册。

插件配置

插件配置是通过配置 Good 插件的参数来自定制日志记录行为。以下是 Good 插件需要的配置信息:

  1. reporters:设定 Good 插件发送日志信息的方式和目的地,如 console、logstash 和 File 等。
  2. events:设定 Good 插件监听哪些事件,并将这些事件转化为日志信息。

以下是一个 Good 插件配置的示例:

const Good = require('good');

const options = {
    reporters: {
        consoleReporter: [{
            module: 'good-squeeze',
            name: 'Squeeze',
            args: [{
                log: '*',
                response: { exclude: '404' }
            }]
        }, {
            module: 'good-console'
        }, 'stdout'],
        fileReporter: [{
            module: 'good-squeeze',
            name: 'Squeeze',
            args: [{
                ops: '*',
                error: '*'
            }]
        }, {
            module: 'good-squeeze',
            name: 'SafeJson'
        }, {
            module: 'good-file',
            args: ['./log/requests.log']
        }]
    },
    events: {
        response: '*',
        log: '*',
        error: '*'
    }
};

server.register({
    plugin: Good,
    options,
    once: true
}, (err) => {
    if (err) {
        console.error(err);
    }
});

在这个示例中,我们使用了两个不同的 reporters:consoleReporterfileReporterconsoleReporter 会将响应信息(除了 404),请求日志和错误日志输出到终端。fileReporter 会将操作日志和错误日志输出到文件。同时,我们监听了 responselogerror 事件,将这些事件转化为日志信息。

插件注册

当我们配置好 Good 插件后,我们需要将它注册到 Hapi 服务器中。注册 Good 插件时,需要将插件名和插件配置传递给 server.register() 方法。以下是插件注册的示例代码:

const Hapi = require('@hapi/hapi');
const Good = require('good');

const server = Hapi.server({
    port: 3000,
    host: 'localhost'
});

const options = { /* Good 插件配置 */ };

server.register({
    plugin: Good,
    options,
    once: true
}, (err) => {
    if (err) {
        console.error(err);
    } else {
        server.start().then(() => {
            console.log(`Server running at: ${server.info.uri}`);
        }).catch(err => {
            console.error(err);
        });
    }
});

在这个示例中,我们将 Good 插件注册到了 Hapi 服务器中,并启动了服务器。

使用 Good 插件记录日志

完成 Good 插件的配置和注册后,我们就可以在 Hapi 应用中使用 Good 插件记录日志了。Good 插件可以记录的日志事件有以下几种:

  1. ops:记录服务器的操作指标,如 CPU 使用率、内存占用等。
  2. error:记录服务器的错误信息,如 JavaScript 异常等。
  3. request:记录客户端请求信息,如客户端 IP、请求方法、请求路径等。
  4. response:记录服务器响应信息,如响应状态码、响应头和响应体大小等。
  5. log:记录自定义应用程序相关的日志信息。

以下是使用 Good 插件记录日志的示例代码:

server.route({
    method: 'GET',
    path: '/',
    handler: (request, h) => {
        server.log(['info'], 'Hello, world!');
        return 'Hello, world!';
    }
});

在这个示例中,我们定义了一个简单的路由处理程序,该程序向客户端返回“Hello, world!”。当客户端访问该路由时,Good 插件会记录一条 info 级别的日志信息。

总结

Good 插件是 Hapi 框架中实现日志记录和收集的常用工具。使用 Good 插件可以方便地记录 Hapi 应用程序的操作、错误、请求和响应等日志信息,并将这些信息发送到多种目的地,如终端、文件和日志服务器等。在实际开发中,使用 Good 插件可以帮助我们更好地了解应用程序的运行情况和遇到的问题。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65a5e4cbadd4f0e0ffe76340


纠错反馈