这个问题和这个差不多,但是我希望django将其详细的请求信息记录到我的logging.FileHandler
中,而不是只能查看web服务器日志。我尝试过设置默认记录器django.requests
,但无法记录4xx和5xx以外的请求信息。
因此,在查阅文档并尝试记录器和级别后,我得出的结论是django实际上没有很多的日志记录声明,因此我想确认一下django是否在内部记录非错误情况的请求。
我不能说我做了彻底的搜索,但从我所看到的django 1.4.1的 django/core/handlers/base.py
中可以看出,django.request
记录器确实仅用于警告和错误条件(4xx/5xx)。
话虽如此,编写中间件以进行各种日志记录非常简单。以下是一个非常简单的示例:
from time import time
from logging import getLogger
class LoggingMiddleware(object):
def __init__(self):
# arguably poor taste to use django's logger
self.logger = getLogger('django.request')
def process_request(self, request):
request.timer = time()
return None
def process_response(self, request, response):
self.logger.info(
'[%s] %s (%.1fs)',
response.status_code,
request.get_full_path(),
time() - request.timer
)
return response
MIDDLEWARE_CLASSES
中,即MIDDLEWARE_CLASSES += ('myapp.middleware.LoggingMiddleware',)
,其中上面的类在文件myapp/middleware.py
中。 - Rebsprocess_request
,则request.timer
可能不存在。我的解决方案是将该行更改为:time() - request.timer if hasattr(request, 'timer') else 0
。 - Colin Basnett