33 lines
992 B
Python
33 lines
992 B
Python
|
|
import logging
|
|||
|
|
|
|||
|
|
from django.http import HttpRequest
|
|||
|
|
|
|||
|
|
|
|||
|
|
class RequestFormatter(logging.Formatter):
|
|||
|
|
def format(self, record):
|
|||
|
|
request = getattr(record, 'request', None)
|
|||
|
|
|
|||
|
|
if isinstance(request, HttpRequest):
|
|||
|
|
# مرحله ۱: از X-Forwarded-For (در صورت وجود)
|
|||
|
|
ip = request.META.get('HTTP_X_FORWARDED_FOR')
|
|||
|
|
|
|||
|
|
# مرحله ۲: از REMOTE_ADDR
|
|||
|
|
if not ip:
|
|||
|
|
ip = request.META.get('REMOTE_ADDR')
|
|||
|
|
|
|||
|
|
# مرحله ۳: اگر هنوز چیزی نیست، مقدار پیشفرض بده (مثلاً localhost)
|
|||
|
|
if not ip:
|
|||
|
|
ip = '127.0.0.1'
|
|||
|
|
|
|||
|
|
# تمیزکاری برای لیست آیپیها
|
|||
|
|
if ',' in ip:
|
|||
|
|
ip = ip.split(',')[0].strip()
|
|||
|
|
|
|||
|
|
record.client_ip = ip
|
|||
|
|
record.path = request.path
|
|||
|
|
else:
|
|||
|
|
record.client_ip = '-'
|
|||
|
|
record.path = '-'
|
|||
|
|
|
|||
|
|
return super().format(record)
|