Skip to content

Latest commit

 

History

History
192 lines (140 loc) · 3.81 KB

web.md

File metadata and controls

192 lines (140 loc) · 3.81 KB

Web Frameworks

Since HTTP logging is a primary use case, Pino has first class support for the Node.js web framework ecosystem.

Pino with Fastify

The Fastify web framework comes bundled with Pino by default, simply set Fastify's logger option to true and use reply.log for log messages that correspond to each individual request:

const fastify = require('fastify')({
  logger: true
})
fastify.get('/', async (request, reply) => {
  reply.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.

Note: Fastify v1 uses Pino v4. The upcoming Fastify v2 will use Pino v5.

See the fastify documentation for more information.

Pino with Express

npm install express-pino-logger
const app = require('express')()
const pino = require('express-pino-logger')()

app.use(pino)

app.get('/', function (req, res) {
  req.log.info('something')
  res.send('hello world')
})

app.listen(3000)

See the express-pino-logger readme for more info.

Pino with Hapi

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.

Pino with Restify

npm install restify-pino-logger
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 for more info.

Pino with Koa

Koa

npm install koa-pino-logger
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 for more info.

Pino with Node core http

npm install pino-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')
}
 
server.listen(3000)

See the pino-http readme for more info.