Files
tk-factory-services/system1-factory/api/middlewares/activityLogger.js
Hyungi Ahn 550633b89d feat: 3-System 분리 프로젝트 초기 코드 작성
TK-FB(공장관리+신고)와 M-Project(부적합관리)를 3개 독립 시스템으로
분리하기 위한 전체 코드 구조 작성.
- SSO 인증 서비스 (bcrypt + pbkdf2 이중 해시 지원)
- System 1: 공장관리 (TK-FB 기반, 신고 코드 제거)
- System 2: 신고 (TK-FB에서 workIssue 코드 추출)
- System 3: 부적합관리 (M-Project 기반)
- Gateway 포털 (path-based 라우팅)
- 통합 docker-compose.yml 및 배포 스크립트

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 14:40:11 +09:00

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
};