@neodx/log
Version:
A lightweight universal logging framework
77 lines (76 loc) • 2.8 kB
JavaScript
var e = require('@neodx/colors'),
r = require('../_internal/read-arguments-DiLh6En8.cjs'),
o = require('../_internal/index-7E2-tFgQ.cjs');
const t =
(e, { ignoreWritableEnded: r = !1, delimiter: t = e => ' ' } = {}) =>
n => {
let s = o.formatIncomingMessage(n.req, n.colors, t(n));
return r || n.res.writableEnded ? e(s, n) : `(aborted) ${s}`;
},
n = t(r.identity, { ignoreWritableEnded: !0 }),
s = t((e, r) => `${r.colors.greenBright(o.formatResponseTime(r.responseTime))} ${e}`),
i = t((e, r) => `${r.colors.redBright(o.formatResponseTime(r.responseTime))} ${e}`),
a = t((e, r) => `${r.colors.redBright(o.formatResponseTime(r.responseTime))} ${e}`, {
delimiter: ({ colors: e, res: r }) => e.italic(` (${o.formatOutgoingMessageStatus(r)}) `)
}),
d = (e, ...r) => ('function' == typeof e ? e(...r) : e);
exports.createHttpLogger = function ({
simple: r = 'development' === process.env.NODE_ENV,
colors: t = e.colors,
logger: l = o.createLogger(),
getRequestId: u = o.createRequestIdGenerator(),
getMeta: c,
getErrorMeta: f,
getErrorMessage: m = r ? a : i,
getRequestMeta: g,
getRequestMessage: p = n,
getResponseMeta: T,
getResponseMessage: $ = s,
shouldLog: q = !0,
shouldLogError: E = !0,
shouldLogRequest: L = !1,
shouldLogResponse: R = !0
} = {}) {
return function (e, n, s) {
if (!d(q, e, n)) return s?.();
e.id ??= u(e, n);
let i = Date.now(),
a = l.fork({ meta: { ...l.meta, ...c?.(e, n), ...(!r && { requestId: e.id, req: e }) } }),
_ = { req: e, res: n, logger: a, colors: t, responseTime: 0 };
(e.log ??= a), (n[o.HTTP_LOG_START_TIME_SYMBOL] = i);
let b = e => (
n.removeListener('finish', b),
n.removeListener('close', b),
n.removeListener('error', b),
(function (e) {
let { error: o, logger: t, res: n, responseTime: s } = e,
i =
o || n.err || (n.statusCode >= 500 && Error('failed with status code ' + n.statusCode));
if (i) {
if (!d(E, e)) return;
let o = f?.(e) ?? { err: i, res: n, responseTime: s };
if (r) {
t.error({ err: i }, m(e)), t.debug(o, 'Error details:');
return;
}
t.error(o, m(e));
return;
}
if (!d(R, e)) return;
let a = T?.(e) ?? { res: n, responseTime: s };
if (r) {
t.done($(e)), t.debug(a, 'Response details:');
return;
}
t.done(a, $(e));
})({ ..._, error: e, responseTime: Date.now() - i })
);
n.on('error', b),
n.on('close', b),
n.on('finish', b),
d(L, _) &&
(r ? (a.info(p(_)), g && a.debug(g(_), 'Request details:')) : a.info(g?.(_) ?? {}, p(_))),
s?.();
};
};
//# sourceMappingURL=index.cjs.map