- 순찰/점검 기능 개선 (zone-detail 페이지 추가) - 출근/근태 시스템 개선 (연차 조회, 근무현황) - 작업분석 대분류 그룹화 및 마이그레이션 스크립트 - 모바일 네비게이션 UI 추가 - NAS 배포 도구 및 문서 추가 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
72 lines
1.6 KiB
JavaScript
72 lines
1.6 KiB
JavaScript
/**
|
|
* 활동 로깅 미들웨어
|
|
*
|
|
* 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
|
|
};
|