express-pino-logger
An express middleware to log with
pino. Incidentally, it also works
without express.
To our knowledge, express-pino-logger
is the fastest express logger in town.
Benchmarks
Benchmarks log each request/response pair while returning
'hello world'
, using
autocannon with 100
connections and 10 pipelined requests (autocannon -c 100 -p 10 http://localhost:3000
).
express-bunyan-logger
: 2702 req/secexpress-winston
: 5953 req/secmorgan
: 8570 req/secexpress-pino-logger
: 9807 req/secexpress-pino-logger
(extreme): 10407 req/secexpress-pino-logger
(without express): 22240.73 req/seqexpress-pino-logger
(without express and extreme): 25536 req/sec
All benchmarks where taken on a Macbook Pro 2013 (2.6GHZ i7, 16GB of RAM).
Whilst we're comparing express-pino-logger
against morgan, this isn't really a fair contest.
Morgan doesn't support logging arbitrary data, nor does it output JSON. Further Morgan uses a form of eval
to achieve high speed logging. Whilst probably safe, using eval
at all tends to cause concern, particular when it comes to server-side JavaScript.
The fact that express-pino-logger
achieves higher throughput with JSON logging and arbitrary data, without using eval
, serves to emphasise the high-speed capabilities of express-pino-logger
.
With express-pino-logger
you can have features, safety and speed.
Install
npm i express-pino-logger --save
Example
'use strict'
var app = require('express')()
var pino = require('express-pino-logger')()
app.use(pino)
app.get('/', function (req, res) {
req.log.info('something else')
res.send('hello world')
})
app.listen(3000)
$ node example.js | pino
[2016-03-31T16:53:21.079Z] INFO (46316 on MBP-di-Matteo): something else
req: {
"id": 1,
"method": "GET",
"url": "/",
"headers": {
"host": "localhost:3000",
"user-agent": "curl/7.43.0",
"accept": "*/*"
},
"remoteAddress": "::1",
"remotePort": 64386
}
[2016-03-31T16:53:21.087Z] INFO (46316 on MBP-di-Matteo): request completed
res: {
"statusCode": 200,
"header": "HTTP/1.1 200 OK\r\nX-Powered-By: Express\r\nContent-Type: text/html; charset=utf-8\r\nContent-Length: 11\r\nETag: W/\"b-XrY7u+Ae7tCTyyK7j1rNww\"\r\nDate: Thu, 31 Mar 2016 16:53:21 GMT\r\nConnection: keep-alive\r\n\r\n"
}
responseTime: 10
req: {
"id": 1,
"method": "GET",
"url": "/",
"headers": {
"host": "localhost:3000",
"user-agent": "curl/7.43.0",
"accept": "*/*"
},
"remoteAddress": "::1",
"remotePort": 64386
}
API
express-pino-logger
has the same options of
pino, look at them there.
express-pino-logger
attaches some listeners to the request, so that
it will log when the request is completed.
License
MIT