/**
* 日誌 Middleware
*/
import pino from 'pino'
import type { Request, Response, NextFunction } from 'express'
export const logger = pino({
level: process.env.LOG_LEVEL || 'info',
formatters: {
level: (label: string) => ({ severity: label.toUpperCase() }),
},
messageKey: 'message',
})
/**
* 簡單的 HTTP 請求日誌 Middleware
*/
export function requestLogger(req: Request, res: Response, next: NextFunction): void {
const startTime = Date.now()
res.on('finish', () => {
const duration = Date.now() - startTime
const level = res.statusCode >= 500 ? 'error' : res.statusCode >= 400 ? 'warn' : 'info'
logger[level]({
method: req.method,
url: req.url,
statusCode: res.statusCode,
durationMs: duration,
user: req.user?.fsuid,
}, `${req.method} ${req.url} ${res.statusCode}`)
})
next()
}