Logging requests to django-rest-framework

后端 未结 8 727
迷失自我
迷失自我 2020-12-02 12:31

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.

8条回答
  •  青春惊慌失措
    2020-12-02 13:05

    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

提交回复
热议问题