/** * 활동 로깅 미들웨어 * * HTTP 요청/응답 활동을 기록하는 미들웨어 * * @author TK-FB-Project * @since 2025-12-11 */ const logger = require('../utils/logger'); /** * 활동 로거 미들웨어 * 모든 HTTP 요청의 시작과 완료를 기록 */ const activityLogger = (req, res, next) => { const start = Date.now(); // 응답 완료 시 로깅 res.on('finish', () => { const duration = Date.now() - start; const username = req.user?.username || 'anonymous'; const logData = { method: req.method, url: req.originalUrl, statusCode: res.statusCode, duration: `${duration}ms`, ip: req.ip, user: username, userAgent: req.get('User-Agent') }; // 상태 코드에 따른 로그 레벨 분기 if (res.statusCode >= 500) { logger.error('HTTP Request - Server Error', logData); } else if (res.statusCode >= 400) { logger.warn('HTTP Request - Client Error', logData); } else if (res.statusCode >= 300) { logger.info('HTTP Request - Redirect', logData); } else { logger.info('HTTP Request - Success', logData); } }); next(); }; /** * 민감한 경로 필터 미들웨어 * 로그에서 민감한 정보를 제외 */ const sensitivePathFilter = (req, res, next) => { const sensitivePaths = [ '/api/auth/login', '/api/auth/refresh-token', '/api/users/password' ]; // 민감한 경로의 경우 바디 로깅 스킵 if (sensitivePaths.some(path => req.originalUrl.includes(path))) { req.skipBodyLog = true; } next(); }; module.exports = { activityLogger, sensitivePathFilter };