For debugging purposes, I would like to use Django\'s logging mechanism to log each and every incoming request when it \"arrives\" at django-rest-framework\'s doorstep.
Made a custom middleware:
import logging
import time
logger = logging.getLogger(__name__)
class APILogMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
start_time = time.time()
response = self.get_response(request)
duration = time.time() - start_time
response_ms = duration * 1000
user = str(getattr(request, 'user', ''))
method = str(getattr(request, 'method', '')).upper()
status_code = str(getattr(response, 'status_code', ''))
request_path = str(getattr(request, 'path', ''))
if status_code == '200' and response_ms > 2000:
logger.info({
"message": "*****SLOW RESPONSE****",
"path": request_path,
"response_time": str(response_ms) + " ms",
"method": method,
"user": user,
"status_code": status_code
})
return response
This logs all APIs which takes greater than 2 seconds to return response. Just add the full path to MIDDLEWARE = ["path.to.APILogMiddleware"] in your settings.py