From c9ccbb64d1e88e5eeb883e460d1fa92a9001251e Mon Sep 17 00:00:00 2001 From: Matteo Collina Date: Thu, 31 Mar 2016 16:05:11 +0200 Subject: [PATCH 1/2] Added the error serializer. --- pino.js | 11 ++++++++++- test.js | 28 ++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/pino.js b/pino.js index ea399ac73..1d37a1e4f 100644 --- a/pino.js +++ b/pino.js @@ -209,9 +209,18 @@ function asResValue (res) { } } +function asErrValue (err) { + return { + type: err.constructor.name, + message: err.message, + stack: err.stack + } +} + module.exports = pino module.exports.stdSerializers = { req: asReqValue, - res: asResValue + res: asResValue, + err: asErrValue } diff --git a/test.js b/test.js index 85876db7e..d2c75d417 100644 --- a/test.js +++ b/test.js @@ -107,6 +107,34 @@ function levelTest (name, level) { instance[name](err) }) + test('passing error with a serializer at level ' + name, function (t) { + t.plan(2) + var err = new Error('myerror') + var instance = pino({ + serializers: { + err: pino.stdSerializers.err + } + }, sink(function (chunk, enc, cb) { + t.ok(new Date(chunk.time) <= new Date(), 'time is greater than Date.now()') + delete chunk.time + t.deepEqual(chunk, { + pid: pid, + hostname: hostname, + level: level, + err: { + type: 'Error', + message: err.message, + stack: err.stack + }, + v: 1 + }) + cb() + })) + + instance.level = name + instance[name]({ err: err }) + }) + test('child logger for level ' + name, function (t) { t.plan(2) var instance = pino(sink(function (chunk, enc, cb) { From 0197b414862df9daa94256834802ea7c7c8a6747 Mon Sep 17 00:00:00 2001 From: Matteo Collina Date: Thu, 31 Mar 2016 16:10:09 +0200 Subject: [PATCH 2/2] Added docs for the error serializer. --- README.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/README.md b/README.md index bb6e96087..551e46b56 100644 --- a/README.md +++ b/README.md @@ -135,6 +135,7 @@ Into this: * logger.trace() * pino.stdSerializers.req * pino.stdSerializers.res + * pino.stdSerializers.err ### pino([stream], [opts]) @@ -324,6 +325,24 @@ It returns an object in the form: } ``` + +### pino.stdSerializers.err + +Serializes an `Error` object if passed in as an property. + +```js +{ + "pid": 40510, + "hostname": "MBP-di-Matteo", + "level": 50, + "msg": "an error", + "time": 1459433282301, + "v": 1, + "type": "Error", + "stack": "Error: an error\n at Object. (/Users/matteo/Repositories/pino/example.js:16:7)\n at Module._compile (module.js:435:26)\n at Object.Module._extensions..js (module.js:442:10)\n at Module.load (module.js:356:32)\n at Function.Module._load (module.js:313:12)\n at Function.Module.runMain (module.js:467:10)\n at startup (node.js:136:18)\n at node.js:963:3" +} +``` + ## How do I rotate log files