diff options
Diffstat (limited to 'src/hero.mjs')
-rw-r--r-- | src/hero.mjs | 33 |
1 files changed, 29 insertions, 4 deletions
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, |