hono-pino-logger
Version:
Pino logger middleware for Hono
52 lines (46 loc) • 1.32 kB
JavaScript
;
var pino = require('pino');
var url = require('hono/utils/url');
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
var pino__default = /*#__PURE__*/_interopDefault(pino);
// src/index.ts
var pinoLogger = (logger = pino__default.default({ level: "info" })) => {
return async (c, next) => {
const { method } = c.req;
const path = url.getPath(c.req.raw);
logger.info(
{
requestId: "requestId" in c.req ? c.req.requestId : void 0,
request: {
method,
path
}
},
"Incoming request"
);
const start = Date.now();
await next();
const { status } = c.res;
logger.info(
{
requestId: "requestId" in c.req ? c.req.requestId : void 0,
response: {
status,
ok: String(c.res.ok),
time: time(start)
}
},
"Request completed"
);
};
};
function humanize(times) {
const [delimiter, separator] = [",", "."];
const orderTimes = times.map((v) => v.replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1" + delimiter));
return orderTimes.join(separator);
}
function time(start) {
const delta = Date.now() - start;
return humanize([delta < 1e3 ? delta + "ms" : Math.round(delta / 1e3) + "s"]);
}
exports.pinoLogger = pinoLogger;