Since HTTP logging is a primary use case, Pino has first class support for the Node.js web framework ecosystem.
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:
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.
See the fastify documentation for more information.
npm install pino-httpconst 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 for more info.
npm install hapi-pino'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 for more info.
npm install restify-pino-loggerconst 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 for more info.
npm install koa-pino-loggerconst 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 for more info.
npm install pino-httpconst 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 for more info.
npm install nestjs-pinoimport { 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 for more info.
npm install pino-httpimport { createServer } from 'http'
import { createApp } from 'h3'
import pino from 'pino-http'
const app = createApp()
app.use(pino())
app.use('/', (req) => {
req.log.info('something')
return 'hello world'
})
createServer(app).listen(process.env.PORT || 3000)See the pino-http readme for more info.