# 1. In settings.py add something like this: import logging logging.basicConfig( level=logging.NOTSET, format='%(asctime)s %(levelname)-8s %(message)s', datefmt='%m-%d %H:%M', #change as needed filename='/path/to/log/dir/my-log-file.log', filemode='a' ) logging.getLogger('').setLevel(logging.NOTSET) # 2. In settings.py add '.middleware.trace.TraceMiddleware' # to MIDDLEWARE_CLASSES. # 3. Then in /middleware create trace.py: import logging, datetime class TraceMiddleware(object): def process_request(self, request) : logging.info( "%s %s" % (request.META['REQUEST_METHOD'], request.get_full_path()) ) request.started = datetime.datetime.now() return None def process_response(self, request, response) : delta = (datetime.datetime.now() - request.started) logging.info( "<- Response in: %f sec.", delta.seconds + (delta.microseconds / 1000000.0) ) return response def process_exception(self, request, exception): logging.exception("*** EXCEPTION ***") # 4. Enjoy luxury of the logging API in your code: .... logging.debug('Redirecting to the home page') return HttpResponseRedirect('/')