summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/hero.mjs33
-rw-r--r--src/utils.mjs4
2 files changed, 33 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,
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);