From 1f0c90b9a34872c3a33ea12c6e5e329a1f98b213 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 25 Feb 2024 06:46:52 -0300 Subject: src/hero.mjs: Promote log() to fancy logger object --- src/hero.mjs | 33 +++++++++++++++++++++++++++++---- src/utils.mjs | 4 ++++ 2 files changed, 33 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/hero.mjs b/src/hero.mjs index 899e3fb..268136f 100644 --- a/src/hero.mjs +++ b/src/hero.mjs @@ -145,7 +145,32 @@ export const makeRequestListener = table => async (req, res) => { res.end(response.body); }; -export const log = o => console.error(JSON.stringify(o)); +export const loggerDefaults = { + pid: process.pid, + ppid: process.ppid, +}; + +export let loggerGlobals = {}; + +export const configLogger = o => loggerGlobals = o; + +export const logit = (writerFn, level, o) => + writerFn(JSON.stringify({ + ...loggerDefaults, + ...loggerGlobals, + level, + ...o, + })); + +export const makeLogger = (writerFn = console.error) => ({ + debug: (...args) => process.env.DEBUG ? + logit(writerFn, "DEBUG", ...args) : + null, + info: u.partial(logit, writerFn, "INFO"), + warn: u.partial(logit, writerFn, "WARN"), + error: u.partial(logit, writerFn, "ERROR"), +}); +export const log = makeLogger(); export const interceptorsFn = ({ uuidFn, @@ -157,7 +182,7 @@ export const interceptorsFn = ({ requestId: (req, next) => next({ ...req, id: uuidFn() }), logged: async (req, next) => { const { id, url, method } = req; - logger({ + logger.info({ id, url, method, @@ -165,7 +190,7 @@ export const interceptorsFn = ({ }); const response = await next(req); const { status } = response; - logger({ + logger.info({ id, status, type: "in-response", @@ -193,7 +218,7 @@ export const interceptorsFn = ({ assert.ok("status" in response, `Missing "status"`); return response; } catch (error) { - logger({ + logger.error({ id: req.id, type: "server-error-interceptor", message: error.message, diff --git a/src/utils.mjs b/src/utils.mjs index f2e09e4..c671f0f 100644 --- a/src/utils.mjs +++ b/src/utils.mjs @@ -76,3 +76,7 @@ export const first = (arr, fn) => { export const promisify = fn => (...args) => new Promise((resolve, reject) => fn(...args, (err, data) => err ? reject(err) : resolve(data))); + +export const partial = (fn, ...startArgs) => + (...endArgs) => + fn(...startArgs, ...endArgs); -- cgit v1.2.3