update documentation
authorJustin Wind <justin.wind+git@gmail.com>
Mon, 29 May 2023 18:08:55 +0000 (11:08 -0700)
committerJustin Wind <justin.wind+git@gmail.com>
Mon, 29 May 2023 18:08:55 +0000 (11:08 -0700)
README.md
lib/data-sanitizers.js
package.json

index 9188471090b815206d79b4f46fccbd497d2ddc27..d5177524fc4bd1b87bd1dbd3ccba3f5c81a7276b 100644 (file)
--- a/README.md
+++ b/README.md
@@ -4,18 +4,26 @@ A simple logger class, which mostly just structures messages, data, and some met
 
 Supports basic scrubbing of well-defined sensitive fields, and an extensible set of JSON replacer functions for common objects.
 
-If provided with an asyncLocalStorage instance, it expects a stored object which will be spread over the resulting logged json, taking precedence.
+If provided with an asyncLocalStorage instance, it expects a stored object which will be spread over the resulting logged JSON.
 
-Intended to be specific to Squeep Framework Applications, this module has opinions.
+Intended to be specific to Squeep Framework Applications, this module has some opinions.
 
 ## API
 
-Expects these arguments in any log call:
-
-- `scope` - e.g. file:method
-- `message` - text
-- `data` - object
-- any additional arguments are included as an array, but not scrubbed
+- `new Logger(options, commonObject, asyncLocalStorage, backend)`
+  - `commonObject` will be merged into every log
+  - `asyncLocalStorage`, if provided, should store an object, which will also be merged into log
+  - `backend` is `console` by default, but may be anything implementing the same log-level functions
+
+- `error(scope, message, data, ...)`
+  - `scope` - identifies source of message, e.g. 'class:method'
+  - `message` - text to be logged
+  - `data` - object to be logged, can be scrubbed of sensitive fields, and will be serialized with provided replacers
+  - any additional arguments are included as an array
+- `warn(scope, message, data, ...)`
+- `info(scope, message, data, ...)`
+- `log(scope, message, data, ...)`
+- `debug(scope, message, data, ...)`
 
 ## JSON Replacers
 
@@ -27,11 +35,11 @@ Includes replacers for these objects:
 - http.OutgoingMessage
 - http.ServerResponse
 
-Custom replacers may be inserted into the logger instance's `jsonReplacers` array.
+Additional replacers may be inserted into the logger instance's `jsonReplacers` array.
 
 ## Data Sanitizers
 
-Custom sanitizers may be inserted into the logger instance's `dataSanitizers` array.
+Sanitizers may be inserted into the logger instance's `dataSanitizers` array.
 
 ## Example
 
index e4d0f3c4bb8238a2d5f5bcd6595440c889139559..bf0495074a0fc9233d9407c0b7b2561e086fe076 100644 (file)
@@ -1,25 +1,32 @@
 'use strict';
 
 /**
- * Here are some sanitizers to replace data fields before logging.
- * Well, really, this just documents the expected format.
+ * Sanitizers replace data fields before logging.
+ * None are bundled, but here is an example of one.
  */
 
 /**
- * template for sanitizers
+ * Example sanitizer function.
+ * Sanitizers are called initially with `sanitize` false, to only determine
+ * whether the data object will be changed.  If so, the sanitizer is then
+ * called again with `sanitize` true, but provided with a clone of the
+ * original data to update, to avoid leaking any applied changes back to the
+ * application.
  * @param {Object} data
  * @param {Boolean} sanitize
- * @returns {Boolean}
+ * @returns {Boolean} whether sanitizer is applicable to data
  */
 /* istanbul ignore next */
 function _sanitizer(data, sanitize = true) {
   let unclean = false;
 
-  if (undefined) { // eslint-disable-line no-constant-condition
+  const sensitiveFieldLength = data?.sensitiveField?.length;
+  if (sensitiveFieldLength) {
     unclean = true;
-  }
-  if (unclean && sanitize) {
-    data;
+
+    if (sanitize) {
+      data.sensitiveField = '*'.repeat(sensitiveFieldLength);
+    }
   }
 
   return unclean;
index 87af158a400827cc69ef9c101df0d0fe7c053b9a..05b6981820e286986465abf81eefa20da1388de0 100644 (file)
@@ -4,10 +4,10 @@
   "engines": {
     "node": ">=14"
   },
-  "description": "A simple logger which spews JSON to stdout; intended for use in Squeep Framework Applications.",
+  "description": "A simple logger which spews formatted data and metadata as JSON to stdout; intended for use in Squeep Framework Applications.",
   "main": "index.js",
   "scripts": {
-    "coverage": "nyc npm test",
+    "coverage": "nyc --clean npm test",
     "coverage-check": "nyc check-coverage",
     "eslint": "eslint *.js lib",
     "test": "mocha --recursive"
@@ -18,7 +18,8 @@
   },
   "keywords": [
     "json",
-    "log"
+    "log",
+    "structured logging"
   ],
   "author": "Justin Wind <jwind-npm@squeep.com>",
   "license": "ISC",