      def uses_server_time(self):
          return self._fmt.find('{server_time}') >= 0
  
  
  def log_response(message, *args, response=None, request=None, logger=request_logger, level=None, exc_info=None):
      """
      Log errors based on HttpResponse status.
  
      Log 5xx responses as errors and 4xx responses as warnings (unless a level
      is given as a keyword argument). The HttpResponse status_code and the
 
</s> remove     # response is the result of an exception and is logged at the time the
    # exception is caught so that the exc_info can be recorded.
 </s> add     # response is the result of an exception and is logged when the exception
    # is caught, to record the exception. </s> remove             exc_info=sys.exc_info(),
 </s> add             exception=exc, </s> remove         exc_info=exc_info,
 </s> add         exc_info=exception, </s> remove             exc_info=sys.exc_info(),
 </s> add             exception=exc,
def log_response(message, *args, response=None, request=None, logger=request_logger, level=None, exception=None):
      def uses_server_time(self):
          return self._fmt.find('{server_time}') >= 0
  
  
def log_response(message, *args, response=None, request=None, logger=request_logger, level=None, exception=None):
      """
      Log errors based on HttpResponse status.
  
      Log 5xx responses as errors and 4xx responses as warnings (unless a level
      is given as a keyword argument). The HttpResponse status_code and the
keep keep keep keep replace keep keep keep keep keep
 Changed django.utils.log.log_response() to take exception instance.

There's little point retrieving a fresh reference to the exception in
the legacy tuple format, when it's all available via the exception
instance we already have. 
django/utils/log.py