Feature suggestion: default replacer to better handle Error objects passed as meta
mfogel opened this issue ยท 5 comments
Hi, thanks a bunch for this project. Super helpful.
Right now, when passing Error
objects in the meta
parameter they get logged as {}
because of the design of the Error
object (as you know doubt know).
const log = require('lambda-log')
const error = new Error('foo')
log.warn('Heads up!', {error})
// {"_logLevel":"warn","msg":"Heads up!","error":{},"_tags":["log","warn"]}
I can use log.options.replacer
to get a much better serialization of the Error object (using the error-to-json package here):
const log = require('lambda-log')
const errorToJson = require('error-to-json').default
log.options.replacer = (key, value) => {
if (value instanceof Error) return errorToJson(value)
return value
}
const error = new Error('foo')
log.warn('Heads up!', {error})
// {"_logLevel":"warn","msg":"Heads up!","error":{"name":"Error","message":"foo","stack":"Error: foo\n at REPL9:1:15\n at Script.runInThisContext (vm.js:120:18)\n at REPLServer.defaultEval (repl.js:442:29)\n at bound (domain.js:427:14)\n at REPLServer.runBound [as eval] (domain.js:440:12)\n at REPLServer.onLine (repl.js:777:10)\n at REPLServer.emit (events.js:326:22)\n at REPLServer.EventEmitter.emit (domain.js:483:12)\n at REPLServer.Interface._onLine (readline.js:329:10)\n at REPLServer.Interface._line (readline.js:658:8)"},"_tags":["log","warn"]}
My suggestion is to consider making this the default behavior. Are there any use cases where serializing an Error
to {}
would be the better behavior?
Thanks again for the project!
@mfogel Right now, this package will handle Error
objects correctly when passed in as the message versus within the meta
. I can see the use cases where you may want to pass an error in the meta
instead.
I'm trying to keep the number of dependencies within this package as minimal as possible so I think I would like to recreate the functionality of the error-to-json
package inside of this one given it's a minimal amount of code.
I'll work on adding this in the next release. Thanks for the feature request!
@mfogel This has been implemented and published in v3.0.0. I'm still waiting on the site to go live with the updated documentation. Thanks for the feature suggestion!
@all-contributors please add @mfogel for ideas
I've put up a pull request to add @mfogel! ๐