From 162f2dc89c0f5352dcdad0eec4c4ba8dbc44cc2d Mon Sep 17 00:00:00 2001 From: wangxiaogang <1433729587@qq.com> Date: Mon, 8 Jun 2026 15:06:29 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=97=A5=E5=BF=97=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - userId 延迟到 finish 事件获取(authMiddleware 已执行) - 日志记录 UTC 时间戳,支持前端按用户时区显示 - 日期筛选和级别筛选 watch 监听修复 - 添加 showDatePicker 变量定义 --- client/src/pages/admin/logs.vue | 7 ++++++- server/src/middleware/logger.ts | 13 +++++++------ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/client/src/pages/admin/logs.vue b/client/src/pages/admin/logs.vue index ceaa360..90528dc 100644 --- a/client/src/pages/admin/logs.vue +++ b/client/src/pages/admin/logs.vue @@ -109,6 +109,7 @@ const logLines = ref([]) const loading = ref(false) const page = ref(1) const total = ref(0) +const showDatePicker = ref(false) const noMore = computed(() => logLines.value.length >= total.value && total.value > 0) @@ -173,6 +174,7 @@ function loadMore() { function selectDate(date: string) { selectedDate.value = date + page.value = 1 loadLogs() } @@ -189,7 +191,10 @@ function getLineClass(line: string): string { } // 筛选条件变化时重新加载 -watch([filterLevel], () => loadLogs()) +watch([filterLevel, selectedDate], () => { + page.value = 1 + loadLogs() +}) function goBack() { uni.navigateBack() diff --git a/server/src/middleware/logger.ts b/server/src/middleware/logger.ts index 4849e0e..3344658 100644 --- a/server/src/middleware/logger.ts +++ b/server/src/middleware/logger.ts @@ -23,9 +23,11 @@ function formatTime(date: Date): string { function writeLog(level: string, message: string, meta?: Record) { const dateStr = getDateStr() const logFile = path.join(LOG_DIR, `${dateStr}.log`) - const time = formatTime(new Date()) + const now = new Date() + const time = formatTime(now) + const timestamp = now.toISOString() // 记录 UTC 时间戳,前端可按用户时区显示 const metaStr = meta ? ` ${JSON.stringify(meta)}` : '' - const line = `[${time}] ${level} ${message}${metaStr}\n` + const line = `[${time}] [${timestamp}] ${level} ${message}${metaStr}\n` fs.appendFile(logFile, line, (err) => { if (err) console.error('[Logger] Write error:', err) @@ -37,13 +39,12 @@ export function requestLogger(req: Request, res: Response, next: NextFunction) { const startTime = Date.now() const { method, url, ip } = req - // 提取用户 ID(如果有 auth 中间件设置) - const userId = (req as any).userId - - // 响应结束时记录日志 + // 响应结束时记录日志(此时 authMiddleware 已执行,userId 可用) res.on('finish', () => { const duration = Date.now() - startTime const { statusCode } = res + // 延迟获取 userId,确保 authMiddleware 已执行 + const userId = (req as any).userId const meta = { method,