import log4js from "logger"; import { randomUUID } from "crypto"; const logger = log4js.getLogger("APP") if (import.meta.dev) { console.log("plugin: 1.error-handler"); } 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"); }) })