release: v1.1.1 — session fixes, storage cleanup, logging
This commit is contained in:
1 parent
acc64751ef
commit
901fefb3f5
20 files changed
+231
-37
No files matched your search
@@ -0,0 +1,43 @@
|
||||
import { clientIp, logError, logException, logWarn, serializeError } from '../utils/logger'
|
||||
|
||||
/**
|
||||
* 记录未捕获的 H3/Nitro 错误(含 createApiError 抛出的 4xx/5xx)。
|
||||
*/
|
||||
export default defineNitroPlugin((nitroApp) => {
|
||||
nitroApp.hooks.hook('error', (error, { event }) => {
|
||||
const serialized = serializeError(error)
|
||||
const status = typeof serialized.statusCode === 'number'
|
||||
? serialized.statusCode
|
||||
: 500
|
||||
|
||||
if (!event) {
|
||||
logError('unhandled error', serialized)
|
||||
return
|
||||
}
|
||||
|
||||
const path = getRequestURL(event).pathname
|
||||
const method = getMethod(event)
|
||||
const base = {
|
||||
method,
|
||||
path,
|
||||
status,
|
||||
ip: clientIp(event),
|
||||
message: serialized.message,
|
||||
...(serialized.statusMessage ? { reason: serialized.statusMessage } : {}),
|
||||
...(serialized.data ? { data: serialized.data } : {})
|
||||
}
|
||||
|
||||
if (!path.startsWith('/api/')) {
|
||||
if (status >= 500) {
|
||||
logException(`${method} ${path}`, error, base)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
if (status >= 500) {
|
||||
logException('API error', error, base)
|
||||
} else if (status >= 400) {
|
||||
logWarn('API rejected', base)
|
||||
}
|
||||
})
|
||||
})
|
||||
@@ -1,4 +1,4 @@
|
||||
import { clientIp, logInfo } from '../utils/logger'
|
||||
import { clientIp, logError, logInfo, logWarn } from '../utils/logger'
|
||||
|
||||
/**
|
||||
* 只记录 /api/*,避免 /images、/twikoo 直链刷屏。
|
||||
@@ -19,11 +19,24 @@ export default defineNitroPlugin((nitroApp) => {
|
||||
const status = getResponseStatus(event)
|
||||
const started = event.context._reqStartedAt as number | undefined
|
||||
const ms = started ? Date.now() - started : undefined
|
||||
const reason = status >= 400 ? getResponseStatusText(event) : undefined
|
||||
|
||||
logInfo(`${method} ${path}`, {
|
||||
const detail: Record<string, unknown> = {
|
||||
status,
|
||||
ms,
|
||||
ip: clientIp(event)
|
||||
})
|
||||
}
|
||||
if (reason && reason !== String(status)) {
|
||||
detail.reason = reason
|
||||
}
|
||||
|
||||
const line = `${method} ${path}`
|
||||
if (status >= 500) {
|
||||
logError(line, detail)
|
||||
} else if (status >= 400) {
|
||||
logWarn(line, detail)
|
||||
} else {
|
||||
logInfo(line, detail)
|
||||
}
|
||||
})
|
||||
})
|
||||
@@ -2,7 +2,7 @@ import { getDataDir } from '../utils/data-dir'
|
||||
import { runAutoDeleteCleanup } from '../utils/auto-delete'
|
||||
import { migrateLocalImagesToIndex } from '../utils/image-index'
|
||||
import { ensureDefaultBackends } from '../utils/storage-backends'
|
||||
import { logInfo } from '../utils/logger'
|
||||
import { logException, logInfo } from '../utils/logger'
|
||||
|
||||
export default defineNitroPlugin(() => {
|
||||
const port = process.env.NITRO_PORT || process.env.PORT || '6892'
|
||||
@@ -20,11 +20,15 @@ export default defineNitroPlugin(() => {
|
||||
if (count > 0) {
|
||||
logInfo('migrated local images to index', { count })
|
||||
}
|
||||
}).catch((error) => {
|
||||
logException('migrate local images to index failed', error)
|
||||
})
|
||||
|
||||
void runAutoDeleteCleanup().then((result) => {
|
||||
if (!result.skipped && (result.deleted > 0 || result.failed > 0)) {
|
||||
logInfo('startup auto-delete', { ...result })
|
||||
}
|
||||
}).catch((error) => {
|
||||
logException('startup auto-delete failed', error)
|
||||
})
|
||||
})
|
||||
Reference in new issue
Block a user