pino-express
Customable Pino express logging middleware
Each request get it's own log id. This helps searching between async logs. See output sections
Supports selecting own fields as log output, see Options step
Install
npm i pino-express
Usage
pino-express
adds three props to each express's req
obj
req.log.[level]
, the pino logger. Levels: (trace,debug,info,warn,error,fatal,silent)req.id
, unique id for each requestreq.duration()
, used to calculate how long a req has been running.
pino
Use withconst app = const pino = const pinoExpress = app; app app
Output
For prettified output, see the Optional step
Options
You can set up your own log output.
The default log output is build based on these defaultOptions
.
// These are the default log objectsconst defaultOptions = // Usage: Runs before request has entered it's route startLog: // Accepts array of strings req: 'req.body''req.headers''req.method''req.params''req.protocol''req.query''req.url' // Accepts string user: 'req.user' /* Accepts object with string user: { user_id: 'req.user.sub' } */ /* Accepts object array of strings user: { foo: ['req.user.bar','req.user.bar1', 'req.user.bar2'] } */ // Usage: req.log.info('log msg') or req.log.[level]('log msg').. middlewareLog: req: 'req.body''req.headers''req.method''req.params''req.protocol''req.query''req.url' user: 'req.user' // Usage: Runs on response errored errorLog: err: 'err' req: 'req.body''req.headers''req.method''req.params''req.protocol''req.query''req.url' res: 'res._headers''res.shouldKeepAlive''res.statusCode''res.statusMessage' user: 'req.user' // Usage: Runs after request.end() has been called finishedLog: res: 'res._headers''res.shouldKeepAlive''res.statusCode''res.statusMessage' user: 'req.user' // app;
pino-multi-stream
Use withconst app = const pinoms = ;const pinoExpress = ;const fs = ; if !fs fs;const streams = // See optional step for pretty console output stream: processstdout // logs to console stream: fs // logs to file // {level: 'fatal', stream: fs.createWriteStream('/logs/pino_fatal.log')};let logger = ;// global.logger = logger; app; app app
Optional
pino-pretty
Use with$ npm i pino-pretty -g
To prettify log output, use pino-pretty
in either:
Console
> node app.js | pino-pretty -c -t
Or in package.json
... "scripts": "start": "node app.js | pino-pretty -c -t" // Prettify console logging output
Output
[2018-10-24 09:38:10.367 +0000] INFO : Started request -> GET /?foo=bar id: 1 req: [2018-10-24 09:38:10.367 +0000] INFO : I have something to log! id: 1[2018-10-24 09:38:10.367 +0000] ERROR : This is not okay! id: 1 error: [2018-10-24 09:38:10.368 +0000] INFO : How long did this take? 1ms id: 1[2018-10-24 09:38:10.377 +0000] INFO : Finished request -> GET /?foo=bar, in 10ms! id: 1 res: responseTime: "10ms"