30 lines
825 B
TypeScript
30 lines
825 B
TypeScript
import { clientIp, logInfo } from '../utils/logger'
|
|
|
|
/**
|
|
* 只记录 /api/*,避免 /images、/twikoo 直链刷屏。
|
|
*/
|
|
export default defineNitroPlugin((nitroApp) => {
|
|
nitroApp.hooks.hook('request', (event) => {
|
|
event.context._reqStartedAt = Date.now()
|
|
})
|
|
|
|
nitroApp.hooks.hook('afterResponse', (event) => {
|
|
const path = getRequestURL(event).pathname
|
|
if (!path.startsWith('/api/')) return
|
|
|
|
// 高频探测接口降噪
|
|
if (path === '/api/auth/me' || path === '/api/auth/config') return
|
|
|
|
const method = getMethod(event)
|
|
const status = getResponseStatus(event)
|
|
const started = event.context._reqStartedAt as number | undefined
|
|
const ms = started ? Date.now() - started : undefined
|
|
|
|
logInfo(`${method} ${path}`, {
|
|
status,
|
|
ms,
|
|
ip: clientIp(event)
|
|
})
|
|
})
|
|
})
|