36 lines
1.1 KiB
Python
36 lines
1.1 KiB
Python
import logging
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class LogIPMiddleware:
|
|
"""Middleware para logar o IP de cada requisição"""
|
|
|
|
def __init__(self, get_response):
|
|
self.get_response = get_response
|
|
|
|
def __call__(self, request):
|
|
# Obtém o IP do cliente
|
|
ip = self.get_client_ip(request)
|
|
|
|
# Loga o IP da requisição
|
|
print(f"Request from IP: {ip}")
|
|
logger.info(f"Request from IP: {ip} - Method: {request.method} - Path: {request.path}")
|
|
|
|
response = self.get_response(request)
|
|
return response
|
|
|
|
def get_client_ip(self, request):
|
|
"""
|
|
Obtém o IP real do cliente, considerando proxies
|
|
"""
|
|
# Verifica se há X-Forwarded-For (quando atrás de proxy/load balancer)
|
|
x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
|
|
if x_forwarded_for:
|
|
ip = x_forwarded_for.split(',')[0].strip()
|
|
else:
|
|
# Caso contrário, usa REMOTE_ADDR
|
|
ip = request.META.get('REMOTE_ADDR')
|
|
|
|
return ip
|