You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					230 lines
				
				4.5 KiB
			
		
		
			
		
	
	
					230 lines
				
				4.5 KiB
			| 
											3 years ago
										 | # Web Frameworks
 | ||
|  | 
 | ||
|  | Since HTTP logging is a primary use case, Pino has first class support for the Node.js | ||
|  | web framework ecosystem. | ||
|  | 
 | ||
|  | - [Web Frameworks](#web-frameworks) | ||
|  |   - [Pino with Fastify](#pino-with-fastify) | ||
|  |   - [Pino with Express](#pino-with-express) | ||
|  |   - [Pino with Hapi](#pino-with-hapi) | ||
|  |   - [Pino with Restify](#pino-with-restify) | ||
|  |   - [Pino with Koa](#pino-with-koa) | ||
|  |   - [Pino with Node core `http`](#pino-with-node-core-http) | ||
|  |   - [Pino with Nest](#pino-with-nest) | ||
|  | 
 | ||
|  | <a id="fastify"></a> | ||
|  | ## Pino with Fastify
 | ||
|  | 
 | ||
|  | The Fastify web framework comes bundled with Pino by default, simply set Fastify's | ||
|  | `logger` option to `true` and use `request.log` or `reply.log` for log messages that correspond | ||
|  | to each individual request: | ||
|  | 
 | ||
|  | ```js | ||
|  | const fastify = require('fastify')({ | ||
|  |   logger: true | ||
|  | }) | ||
|  | fastify.get('/', async (request, reply) => { | ||
|  |   request.log.info('something') | ||
|  |   return { hello: 'world' } | ||
|  | }) | ||
|  | ``` | ||
|  | 
 | ||
|  | The `logger` option can also be set to an object, which will be passed through directly | ||
|  | as the [`pino` options object](/docs/api.md#options-object). | ||
|  | 
 | ||
|  | See the [fastify documentation](https://www.fastify.io/docs/latest/Logging/) for more information. | ||
|  | 
 | ||
|  | <a id="express"></a> | ||
|  | ## Pino with Express
 | ||
|  | 
 | ||
|  | ```sh | ||
|  | npm install pino-http | ||
|  | ``` | ||
|  | 
 | ||
|  | ```js | ||
|  | 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) | ||
|  | ``` | ||
|  | 
 | ||
|  | See the [pino-http readme](https://npm.im/pino-http) for more info. | ||
|  | 
 | ||
|  | <a id="hapi"></a> | ||
|  | ## Pino with Hapi
 | ||
|  | 
 | ||
|  | ```sh | ||
|  | npm install hapi-pino | ||
|  | ``` | ||
|  | 
 | ||
|  | ```js | ||
|  | 'use strict' | ||
|  | 
 | ||
|  | require('make-promises-safe') | ||
|  | 
 | ||
|  | const Hapi = require('hapi') | ||
|  | 
 | ||
|  | async function start () { | ||
|  |   // Create a server with a host and port | ||
|  |   const server = Hapi.server({ | ||
|  |     host: 'localhost', | ||
|  |     port: 3000 | ||
|  |   }) | ||
|  | 
 | ||
|  |   // Add the route | ||
|  |   server.route({ | ||
|  |     method: 'GET', | ||
|  |     path: '/', | ||
|  |     handler: async function (request, h) { | ||
|  |       // request.log is HAPI standard way of logging | ||
|  |       request.log(['a', 'b'], 'Request into hello world') | ||
|  | 
 | ||
|  |       // a pino instance can also be used, which will be faster | ||
|  |       request.logger.info('In handler %s', request.path) | ||
|  | 
 | ||
|  |       return 'hello world' | ||
|  |     } | ||
|  |   }) | ||
|  | 
 | ||
|  |   await server.register({ | ||
|  |     plugin: require('.'), | ||
|  |     options: { | ||
|  |       prettyPrint: process.env.NODE_ENV !== 'production' | ||
|  |     } | ||
|  |   }) | ||
|  | 
 | ||
|  |   // also as a decorated API | ||
|  |   server.logger().info('another way for accessing it') | ||
|  | 
 | ||
|  |   // and through Hapi standard logging system | ||
|  |   server.log(['subsystem'], 'third way for accessing it') | ||
|  | 
 | ||
|  |   await server.start() | ||
|  | 
 | ||
|  |   return server | ||
|  | } | ||
|  | 
 | ||
|  | start().catch((err) => { | ||
|  |   console.log(err) | ||
|  |   process.exit(1) | ||
|  | }) | ||
|  | ``` | ||
|  | 
 | ||
|  | See the [hapi-pino readme](https://npm.im/hapi-pino) for more info. | ||
|  | 
 | ||
|  | <a id="restify"></a> | ||
|  | ## Pino with Restify
 | ||
|  | 
 | ||
|  | ```sh | ||
|  | npm install restify-pino-logger | ||
|  | ``` | ||
|  | 
 | ||
|  | ```js | ||
|  | 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) | ||
|  | ``` | ||
|  | 
 | ||
|  | See the [restify-pino-logger readme](https://npm.im/restify-pino-logger) for more info. | ||
|  | 
 | ||
|  | <a id="koa"></a> | ||
|  | ## Pino with Koa
 | ||
|  | 
 | ||
|  | ```sh | ||
|  | npm install koa-pino-logger | ||
|  | ``` | ||
|  | 
 | ||
|  | ```js | ||
|  | 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) | ||
|  | ``` | ||
|  | 
 | ||
|  | See the [koa-pino-logger readme](https://github.com/pinojs/koa-pino-logger) for more info. | ||
|  | 
 | ||
|  | <a id="http"></a> | ||
|  | ## Pino with Node core `http`
 | ||
|  | 
 | ||
|  | ```sh | ||
|  | npm install pino-http | ||
|  | ``` | ||
|  | 
 | ||
|  | ```js | ||
|  | 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') | ||
|  | } | ||
|  | 
 | ||
|  | server.listen(3000) | ||
|  | ``` | ||
|  | 
 | ||
|  | See the [pino-http readme](https://npm.im/pino-http) for more info. | ||
|  | 
 | ||
|  | 
 | ||
|  | <a id="nest"></a> | ||
|  | ## Pino with Nest
 | ||
|  | 
 | ||
|  | ```sh | ||
|  | npm install nestjs-pino | ||
|  | ``` | ||
|  | 
 | ||
|  | ```ts | ||
|  | 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() | ||
|  | ``` | ||
|  | 
 | ||
|  | See the [nestjs-pino readme](https://npm.im/nestjs-pino) for more info. |