@neodx/log
Version:
A lightweight universal logging framework
78 lines (77 loc) • 2.69 kB
JavaScript
import { colors as e } from '@neodx/colors';
import { i as r } from '../_internal/read-arguments-CPC3VkQ4.mjs';
import { H as o, c as t, a as s, f as n, b as i, d as l } from '../_internal/index-DFam5V4O.mjs';
function a({
simple: r = 'development' === process.env.NODE_ENV,
colors: n = e,
logger: i = t(),
getRequestId: l = s(),
getMeta: a,
getErrorMeta: d,
getErrorMessage: p = r ? c : u,
getRequestMeta: $,
getRequestMessage: b = f,
getResponseMeta: h,
getResponseMessage: E = m,
shouldLog: v = !0,
shouldLogError: T = !0,
shouldLogRequest: w = !1,
shouldLogResponse: L = !0
} = {}) {
return function (e, t, s) {
if (!g(v, e, t)) return s?.();
e.id ??= l(e, t);
let f = Date.now(),
m = i.fork({ meta: { ...i.meta, ...a?.(e, t), ...(!r && { requestId: e.id, req: e }) } }),
u = { req: e, res: t, logger: m, colors: n, responseTime: 0 };
(e.log ??= m), (t[o] = f);
let c = e => (
t.removeListener('finish', c),
t.removeListener('close', c),
t.removeListener('error', c),
(function (e) {
let { error: o, logger: t, res: s, responseTime: n } = e,
i =
o || s.err || (s.statusCode >= 500 && Error('failed with status code ' + s.statusCode));
if (i) {
if (!g(T, e)) return;
let o = d?.(e) ?? { err: i, res: s, responseTime: n };
if (r) {
t.error({ err: i }, p(e)), t.debug(o, 'Error details:');
return;
}
t.error(o, p(e));
return;
}
if (!g(L, e)) return;
let l = h?.(e) ?? { res: s, responseTime: n };
if (r) {
t.done(E(e)), t.debug(l, 'Response details:');
return;
}
t.done(l, E(e));
})({ ...u, error: e, responseTime: Date.now() - f })
);
t.on('error', c),
t.on('close', c),
t.on('finish', c),
g(w, u) &&
(r ? (m.info(b(u)), $ && m.debug($(u), 'Request details:')) : m.info($?.(u) ?? {}, b(u))),
s?.();
};
}
let d =
(e, { ignoreWritableEnded: r = !1, delimiter: o = e => ' ' } = {}) =>
t => {
let s = n(t.req, t.colors, o(t));
return r || t.res.writableEnded ? e(s, t) : `(aborted) ${s}`;
},
f = d(r, { ignoreWritableEnded: !0 }),
m = d((e, r) => `${r.colors.greenBright(i(r.responseTime))} ${e}`),
u = d((e, r) => `${r.colors.redBright(i(r.responseTime))} ${e}`),
c = d((e, r) => `${r.colors.redBright(i(r.responseTime))} ${e}`, {
delimiter: ({ colors: e, res: r }) => e.italic(` (${l(r)}) `)
}),
g = (e, ...r) => ('function' == typeof e ? e(...r) : e);
export { a as createHttpLogger };
//# sourceMappingURL=index.mjs.map