You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
36 lines
1.2 KiB
36 lines
1.2 KiB
import log4js from "logger";
|
|
import { randomUUID } from "crypto";
|
|
|
|
const logger = log4js.getLogger("APP")
|
|
|
|
if (import.meta.dev) {
|
|
console.log("plugin: 00.req-time");
|
|
}
|
|
|
|
declare module "http" {
|
|
interface IncomingMessage {
|
|
$beginTime: number;
|
|
$requestId: string;
|
|
}
|
|
}
|
|
|
|
export default defineNitroPlugin((nitroApp) => {
|
|
nitroApp.hooks.hook('request', async (event) => {
|
|
const incoming = event.node.req.headers["x-request-id"];
|
|
const requestId =
|
|
typeof incoming === "string" && incoming.trim().length > 0
|
|
? incoming.trim()
|
|
: randomUUID();
|
|
|
|
event.node.req.$requestId = requestId;
|
|
event.node.req.$beginTime = new Date().getTime();
|
|
event.node.res.setHeader("X-Request-Id", requestId);
|
|
logger.info(`[${requestId}]`, `[${event.method}-${event.path}]`, "开始请求");
|
|
})
|
|
nitroApp.hooks.hook('afterResponse', async (event) => {
|
|
const requestId = event.node.req.$requestId ?? "(no-request-id)";
|
|
let curTime = new Date().getTime()
|
|
let offsetTime = curTime - event.node.req.$beginTime
|
|
logger.info(`[${requestId}]`, `[${event.method}-${event.path}]`, "请求结束,花费了", offsetTime, "ms");
|
|
})
|
|
})
|
|
|