summaryrefslogtreecommitdiff
path: root/src/hero.mjs
diff options
context:
space:
mode:
Diffstat (limited to 'src/hero.mjs')
-rw-r--r--src/hero.mjs33
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,