Skip to content

Instantly share code, notes, and snippets.

@jeremybradbury
Last active November 24, 2021 18:33
Show Gist options
  • Save jeremybradbury/827533300a67d52834f04a11caa61106 to your computer and use it in GitHub Desktop.
Save jeremybradbury/827533300a67d52834f04a11caa61106 to your computer and use it in GitHub Desktop.
Log, Log, it's big it's heavy it's wood. Better than bad, it's good
// a very basic Winston replacement, which combines well with a systemd service, to replace most features
const isProd = process.env.NODE_ENV === "production";
const logLog = (level, ...e) => {
switch (true) {
case e && !!e.find((o) => o.redact): // params contain an object with a key called redact: {redact: true}
case isProd && level === "dir":
case isProd && level === "log":
case isProd && level === "info":
case isProd && level === "debug":
return;
default:
console[level](...e);
break;
}
};
const logger = {
error: (...e) => logLog("error", ...e), // level 1
redacted: (...e) => logLog("error", { redact: true }, ...e),
warn: (...e) => logLog("warn", ...e), // level 2
log: (...e) => logLog("log", ...e), // level 3
info: (...e) => logLog("info", ...e), // level 4
debug: (...e) => logLog("debug", ...e), // level 5
silly: (...e) => logLog("debug", ...e), // level 5
}
// full redacted warn example, using core API
logLog(
"warn",
"someFunctionName or some/path/name",
new Error("hide internals from prod logs, but level a warning in dev/test"),
{redact: true}
);
// simple error report
logger.error("something went wrong"); // console.error with filters
// verbose mode
logger.debug("someConfigOptions", {isProd, logger}); // console.debug with filters
// Thanks John Kricfalusi ;-]
// https://www.youtube.com/watch?v=5Y0dGHkAkIY
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment