diff --git a/lib/LoggingEvent.js b/lib/LoggingEvent.js index 5732a27..b96ed36 100644 --- a/lib/LoggingEvent.js +++ b/lib/LoggingEvent.js @@ -32,40 +32,37 @@ class LoggingEvent { } serialise() { - const logData = this.data.map((e) => { + return flatted.stringify(this, (key, value) => { // JSON.stringify(new Error('test')) returns {}, which is not really useful for us. // The following allows us to serialize errors correctly. // duck-typing for Error object - if (e && e.message && e.stack) { - e = Object.assign({ message: e.message, stack: e.stack }, e); + if (value && value.message && value.stack) { + value = Object.assign({message: value.message, stack: value.stack}, value); } // JSON.stringify({a: parseInt('abc'), b: 1/0, c: -1/0}) returns {a: null, b: null, c: null}. // The following allows us to serialize to NaN, Infinity and -Infinity correctly. - else if (typeof e === 'number' && (isNaN(e) || !isFinite(e))) { - e = e.toString(); + else if (typeof value === 'number' && (isNaN(value) || !isFinite(value))) { + value = value.toString(); } // JSON.stringify([undefined]) returns [null]. // The following allows us to serialize to undefined correctly. - else if (typeof e === 'undefined') { - e = typeof e; + else if (typeof value === 'undefined') { + value = typeof value; } - return e; + return value; }); - this.data = logData; - return flatted.stringify(this); } static deserialise(serialised) { let event; try { - const rehydratedEvent = flatted.parse(serialised); - rehydratedEvent.data = rehydratedEvent.data.map((e) => { - if (e && e.message && e.stack) { - const fakeError = new Error(e); - Object.keys(e).forEach((key) => { fakeError[key] = e[key]; }); - e = fakeError; + const rehydratedEvent = flatted.parse(serialised, (key, value) => { + if (value && value.message && value.stack) { + const fakeError = new Error(value); + Object.keys(value).forEach((k) => { fakeError[k] = value[k]; }); + value = fakeError; } - return e; + return value; }); event = new LoggingEvent( rehydratedEvent.categoryName,