-
Notifications
You must be signed in to change notification settings - Fork 1
JSON Serialization
Initially with version 1 of the perj
logger the JavaScript objects were converted into JSON strings (serialized) by using the fast-safe-stringify module.
It was discovered soon after the initial version 1 release that the fast-safe-stringify
module had some issues recursively parsing Vue.js objects. It was also made apparent that using the passThrough option was literally passing the object references though to the write function.
With these issues in mind a new internal module was created called notation-copy.
The notation-copy module is an internal module to the perj
project. It offers major improvements in the parsing of JavaScript objects both in the Node.js and Browser environments.
The notation-copy
module supports the following features:
- Fast object parsing.
- Supports the same API as
Object.assign
. - Deep copies JavaScript objects in preparation for JSON stringification.
- Replaces circular references with the
[Circular]
string token. - Removes non-JSON related artifacts such as Functions.
- Follows the JSON.stringify MDN reference documentation for JavaScript type support.
By passing an object into the notation-copy
module the returned resulting object has no references to the original object and is void of non-JSON constructs.
The notation-copy
module is used to copy objects passed into the perj
log methods. These sanitized objects are then stringified with a simple JSON.stringify
call to provide the logger output. If the passThrough option is used with a custom write function, the object passed into the custom write function is clear of circular references and non-JSON related artifacts.
Despite copying the content from logged objects, perj
using the notation-copy
module remains extremely fast when compared to pino
. See the Performance document for more detail.