Pino:为何大多数前端开发如此钟情它?( 二 )


  • 强大的路由
  • 专注于高性能
  • 超高测试覆盖率
  • 大量 HTTP 工具函数(重定向、缓存等)
  • 查看系统支持 14+ 模板引擎
  • 内容协商(Content negotiation)
  • 可执行以快速生成应用程序
Pino 与 Express 的集成也非常简单 , 比如下面的示例:
const app = require('express')();const pino = require('pino-http')();app.use(pino);app.get('/', function (req, res) {req.log.info('something');res.send('hello world');});app.listen(3000);Pino 和 Hapi 集成Hapi 是开发人员信任的简单、安全的框架 以最小的开销和完整的开箱即用功能构建功能强大、可扩展的应用程序 , 在 NPM 上周平均下载量达到了 512k 。
Pino 与 Hapi 的集成也非常简单 , 比如下面的示例:
'use strict';require('make-promises-safe');const Hapi = require('@hapi/hapi');const Pino = require('hapi-pino');async function start() {// 创建一个有host和port的服务器const server = Hapi.server({host: 'localhost',port: 3000,});// 添加路由server.route({method: 'GET',path: '/',handler: async function (request, h) {//request.log 是 HAPI 的标准日志记录方式request.log(['a', 'b'], 'Request into hello world');//也可以使用 pino 实例 , 这样会更快request.logger.info('In handler %s', request.path);return 'hello world';},});awAIt server.register(Pino);//也作为修饰的 APIserver.logger.info('another way for accessing it');//并通过 Hapi 标准日志系统server.log(['subsystem'], 'third way for accessing it');await server.start();return server;}start().catch((err) => {console.log(err);process.exit(1);});Pino 与 Restifyrestify 是一个框架 , 利用 connect 风格的中间件来构建 REST API 。Pino 与 Restify 的集成也非常简单 , 比如下面的示例:
const server = require('restify').createServer({ name: 'server' });const pino = require('restify-pino-logger')();server.use(pino);server.get('/', function (req, res) {req.log.info('something');res.send('hello world');});server.listen(3000);Pino 与 KoaKoa 是用于 node.js 的富有表现力的 HTTP 中间件框架 , 使 Web 应用程序和 API 编写起来更轻松 。Koa 的中间件以类似堆栈的方式流动 , 允许开发者在下游执行操作然后在上游过滤和操作响应 。Koa 没有打包任何中间件 。
Pino 与 Koa 的集成也非常简单 , 比如下面的示例:
const Koa = require('koa');const app = new Koa();const pino = require('koa-pino-logger')();app.use(pino);app.use((ctx) => {ctx.log.info('something else');ctx.body = 'hello world';});app.listen(3000);Pino 与 httpPino 与 http 的集成也非常简单 , 比如下面的示例:
const http = require('http');const server = http.createServer(handle);const logger = require('pino-http')();function handle(req, res) {logger(req, res);req.log.info('something else');res.end('hello world');}Pino 与 NestNest 是一个用于构建高效、可扩展的 Node.js 服务器端应用程序的框架 。它基于现代 JAVAScript , 使用 TypeScript 构建(保留与纯 JavaScript 的兼容性)并结合了 OOP(面向对象编程)、FP(函数式编程)和 FRP(函数式响应式编程)的元素 。
本质上 , Nest 是基于 Express , 但也提供了与广泛的其他库的兼容性 , 例如 Fastify , 允许轻松使用无数可用的第三方插件 。Pino 与 Nest 的集成也非常简单 , 比如下面的示例:
import { NestFactory } from '@nestjs/core'import { Controller, Get, Module } from '@nestjs/common'import { LoggerModule, Logger } from 'nestjs-pino'@Controller()export class AppController {constructor(private readonly logger: Logger) {}@Get()getHello() {this.logger.log('something')return `Hello world`}}@Module({controllers: [AppController],imports: [LoggerModule.forRoot()]})class MyModule {}async function bootstrap() {const app = await NestFactory.create(MyModule)await app.listen(3000)}bootstrap()Pino 与 H3H3 是为高性能和可移植性构建的最小 http 框架 , NPM 上周平均下载量达到了 267K , 具有以下典型特性: