# nhn_prj/middleware.py import logging import time import sys logger = logging.getLogger(__name__) class RequestLoggingMiddleware: """모든 요청을 로깅하는 미들웨어""" def __init__(self, get_response): self.get_response = get_response def __call__(self, request): # 요청 시작 시간 start_time = time.time() # 표준출력으로 직접 출력 print( f"[REQUEST] {request.method} {request.path} " f"| Host: {request.get_host()} " f"| IP: {self.get_client_ip(request)}", file=sys.stdout, flush=True ) # 헤더 로깅 (디버깅용) nhn_headers = { k: v for k, v in request.headers.items() if k.lower().startswith('x-nhn') } if nhn_headers: print(f"[HEADERS] NHN Headers: {nhn_headers}", file=sys.stdout, flush=True) # 응답 처리 response = self.get_response(request) # 응답 시간 계산 duration = time.time() - start_time # 응답 정보 로깅 print( f"[RESPONSE] {request.method} {request.path} " f"| Status: {response.status_code} " f"| Duration: {duration:.3f}s", file=sys.stdout, flush=True ) return response def get_client_ip(self, request): """클라이언트 IP 추출""" x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR') if x_forwarded_for: return x_forwarded_for.split(',')[0].strip() return request.META.get('REMOTE_ADDR', 'unknown')