Socket
Socket
Sign inDemoInstall

pino

Package Overview
Dependencies
Maintainers
2
Versions
310
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

pino - npm Package Compare versions

Comparing version 0.2.5 to 0.3.0

2

package.json
{
"name": "pino",
"version": "0.2.5",
"version": "0.3.0",
"description": "fast and simple logger",

@@ -5,0 +5,0 @@ "main": "pino.js",

@@ -38,2 +38,3 @@ 'use strict'

}
var serializers = opts.serializers || {}

@@ -80,2 +81,8 @@ for (var key in levels) {

base = 1
if (obj.method && obj.headers && obj.socket) {
obj = mapHttpRequest(obj)
} else if (obj.statusCode) {
obj = mapHttpResponse(obj)
}
} else {

@@ -96,3 +103,4 @@ params = [a, b, c, d, e, f, g, h, i, j, k]

}
var data = JSON.stringify(new Message(num, msg))
var data = message(num, msg)
var value
if (obj) {

@@ -105,4 +113,6 @@ data = data.slice(0, data.length - 1)

for (var key in obj) {
if (obj.hasOwnProperty(key) && obj[key] !== undefined) {
data += ',"' + key + '":' + stringify(obj[key])
value = obj[key]
if (obj.hasOwnProperty(key) && value !== undefined) {
value = serializers[key] ? serializers[key](value) : value
data += ',"' + key + '":' + stringify(value)
}

@@ -116,10 +126,10 @@ }

function Message (level, msg) {
this.pid = pid
this.hostname = hostname
this.name = name
this.level = level
this.msg = msg && msg.toString()
this.time = new Date()
this.v = 0
function message (level, msg) {
return '{"pid":' + pid + ',' +
(typeof hostname === 'undefined' ? '' : '"hostname":"' + hostname + '",') +
(typeof name === 'undefined' ? '' : '"name":"' + name + '",') +
'"level":' + level + ',' +
(typeof msg === 'undefined' ? '' : '"msg":"' + (msg && msg.toString()) + '",') +
'"time":"' + (new Date()).toISOString() + '",' +
'"v":' + 0 + '}'
}

@@ -130,2 +140,36 @@ }

function mapHttpRequest (req) {
return {
req: asReqValue(req)
}
}
function mapHttpResponse (res) {
return {
res: asResValue(res)
}
}
function asReqValue (req) {
return {
method: req.method,
url: req.url,
headers: req.headers,
remoteAddress: req.connection.remoteAddress,
remotePort: req.connection.remotePort
}
}
function asResValue (res) {
return {
statusCode: res.statusCode,
header: res._header
}
}
module.exports = pino
module.exports.stdSerializers = {
req: asReqValue,
res: asResValue
}

@@ -13,2 +13,3 @@ # pino

* [How do I rotate log files?](#rotate)
* [Acknowledgements](#acknowledgements)
* [License](#license)

@@ -66,2 +67,4 @@

* <a href="#trace"><code>logger.<b>trace()</b></code></a>
* <a href="#reqSerializer"><code>pino.stdSerializers.<b>req</b></code></a>
* <a href="#resSerializer"><code>pino.stdSerializers.<b>res</b></code></a>

@@ -76,5 +79,24 @@ <a name="constructor"></a>

* `name`: the name of the logger, default `undefined`
* `serializers`: an object containing functions for custom serialization
of objects. These functions should return an jsonificable object and
they should never throw.
`stream` is a Writable stream, defaults to `process.stdout`.
Example:
```js
'use strict'
var pino = require('pino')
var instance = pino({
name: 'myapp',
safe: true,
serializers: {
req: pino.stdSerializers.req
res: pino.stdSerializers.res
}
}
```
<a name="level"></a>

@@ -145,2 +167,55 @@ ### logger.level

<a name="reqSerializer"></a>
### pino.stdSerializers.req
Function to generate a jsonificable object out of an HTTP request from
node HTTP server.
It returns an object in the form:
```js
{
pid: 93535,
hostname: 'your host',
level: 30,
msg: 'my request',
time: '2016-03-07T12:21:48.766Z',
v: 0,
req: {
method: 'GET',
url: '/',
headers: {
host: 'localhost:50201',
connection: 'close'
},
remoteAddress: '::ffff:127.0.0.1',
remotePort: 50202
}
}
```
<a name="resSerializer"></a>
### pino.stdSerializers.res
Function to generate a jsonificable object out of an HTTP
response from
node HTTP server.
It returns an object in the form:
```js
{
pid: 93581,
hostname: 'myhost',
level: 30,
msg: 'my response',
time: '2016-03-07T12:23:18.041Z',
v: 0,
res: {
statusCode: 200,
header: 'HTTP/1.1 200 OK\r\nDate: Mon, 07 Mar 2016 12:23:18 GMT\r\nConnection: close\r\nContent-Length: 5\r\n\r\n'
}
}
```
<a name="benchmarks"></a>

@@ -152,18 +227,18 @@ ## Benchmarks

```
benchBunyan*10000: 1128ms
benchWinston*10000: 1903ms
benchBole*10000: 1511ms
benchPino*10000: 439ms
benchBunyanObj*10000: 1209ms
benchWinstonObj*10000: 1948ms
benchPinoObj*10000: 526ms
benchBoleObj*10000: 1466ms
benchBunyan*10000: 1064ms
benchWinston*10000: 1827ms
benchBole*10000: 1524ms
benchPino*10000: 438ms
benchBunyanObj*10000: 1220ms
benchWinstonObj*10000: 2119ms
benchPinoObj*10000: 524ms
benchBoleObj*10000: 1522ms
benchBunyan*10000: 1116.721ms
benchWinston*10000: 1783.362ms
benchBole*10000: 1496.580ms
benchPino*10000: 363.430ms
benchBunyanObj*10000: 1228.538ms
benchWinstonObj*10000: 1895.251ms
benchPinoObj*10000: 427.989ms
benchBoleObj*10000: 1487.543ms
benchBunyan*10000: 1088.231ms
benchWinston*10000: 1733.589ms
benchBole*10000: 1514.004ms
benchPino*10000: 377.418ms
benchBunyanObj*10000: 1205.833ms
benchWinstonObj*10000: 1800.594ms
benchPinoObj*10000: 412.170ms
benchBoleObj*10000: 1522.469ms
```

@@ -198,4 +273,9 @@

<a name="acknowledgements"></a>
## Acknowledgements
This project was kindly sponsored by [nearForm](http://nearform.com).
## License
MIT

@@ -8,2 +8,3 @@ 'use strict'

var split = require('split2')
var http = require('http')
var pid = process.pid

@@ -254,1 +255,155 @@ var hostname = os.hostname()

})
test('http request support', function (t) {
t.plan(3)
var originalReq
var instance = pino(sink(function (chunk, enc, cb) {
t.ok(Date.parse(chunk.time) <= new Date(), 'time is greater than Date.now()')
delete chunk.time
t.deepEqual(chunk, {
pid: pid,
hostname: hostname,
level: 30,
msg: 'my request',
v: 0,
req: {
method: originalReq.method,
url: originalReq.url,
headers: originalReq.headers,
remoteAddress: originalReq.connection.remoteAddress,
remotePort: originalReq.connection.remotePort
}
})
cb()
}))
var server = http.createServer(function (req, res) {
originalReq = req
instance.info(req, 'my request')
res.end('hello')
}).listen(function (err) {
t.error(err)
t.teardown(server.close.bind(server))
http.get('http://localhost:' + server.address().port, function (res) {
res.resume()
})
})
})
test('http request support via serializer', function (t) {
t.plan(3)
var originalReq
var instance = pino({
serializers: {
req: pino.stdSerializers.req
}
}, sink(function (chunk, enc, cb) {
t.ok(Date.parse(chunk.time) <= new Date(), 'time is greater than Date.now()')
delete chunk.time
t.deepEqual(chunk, {
pid: pid,
hostname: hostname,
level: 30,
msg: 'my request',
v: 0,
req: {
method: originalReq.method,
url: originalReq.url,
headers: originalReq.headers,
remoteAddress: originalReq.connection.remoteAddress,
remotePort: originalReq.connection.remotePort
}
})
cb()
}))
var server = http.createServer(function (req, res) {
originalReq = req
instance.info({ req: req }, 'my request')
res.end('hello')
}).listen(function (err) {
t.error(err)
t.teardown(server.close.bind(server))
http.get('http://localhost:' + server.address().port, function (res) {
res.resume()
})
})
})
test('http response support', function (t) {
t.plan(3)
var originalRes
var instance = pino(sink(function (chunk, enc, cb) {
t.ok(Date.parse(chunk.time) <= new Date(), 'time is greater than Date.now()')
delete chunk.time
t.deepEqual(chunk, {
pid: pid,
hostname: hostname,
level: 30,
msg: 'my response',
v: 0,
res: {
statusCode: originalRes.statusCode,
header: originalRes._header
}
})
cb()
}))
var server = http.createServer(function (req, res) {
originalRes = res
res.end('hello')
instance.info(res, 'my response')
}).listen(function (err) {
t.error(err)
t.teardown(server.close.bind(server))
http.get('http://localhost:' + server.address().port, function (res) {
res.resume()
})
})
})
test('http response support via a serializer', function (t) {
t.plan(3)
var originalRes
var instance = pino({
serializers: {
res: pino.stdSerializers.res
}
}, sink(function (chunk, enc, cb) {
t.ok(Date.parse(chunk.time) <= new Date(), 'time is greater than Date.now()')
delete chunk.time
t.deepEqual(chunk, {
pid: pid,
hostname: hostname,
level: 30,
msg: 'my response',
v: 0,
res: {
statusCode: originalRes.statusCode,
header: originalRes._header
}
})
cb()
}))
var server = http.createServer(function (req, res) {
originalRes = res
res.end('hello')
instance.info({ res: res }, 'my response')
}).listen(function (err) {
t.error(err)
t.teardown(server.close.bind(server))
http.get('http://localhost:' + server.address().port, function (res) {
res.resume()
})
})
})
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc