mirror of
https://github.com/log4js-node/log4js-node.git
synced 2025-12-08 19:26:01 +00:00
Fixed serialise() for NaN, Infinity, -Infinity and undefined recursively
This commit is contained in:
parent
ceb06bed61
commit
4fc8634fa9
@ -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,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user