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.
							 |