在Django中记录Web服务请求

时间:2013-02-22 14:21:55

标签: django web-services logging

我使用Django创建了一个REST Web服务。此Web服务具有日志文件。我想在日志文件中记录所有Web服务(http)请求。但是,Web服务请求处理由Django完成,我只设置url-request处理程序映射并创建请求处理程序(Django命名法中的视图)。有没有办法在中心点记录所有请求,而无需在其关联的请求处理程序(视图)中记录每个请求?

提前致谢。

1 个答案:

答案 0 :(得分:2)

是Django有一个内置的signals框架。

它允许您在每次请求开始时注册要调用的函数。

This documenation页面逐步说明了如何执行此操作

使用装饰器方法:

from django.core.signals import request_started
from django.dispatch import receiver

@receiver(request_started)
def my_callback(sender, **kwargs):
    # log the request here
    pass
  

此代码应该在哪里生效?你可以把信号处理和   注册码随时随地。但是,您需要确保   它所在的模块会在早期导入,以便输出信号   处理在需要发送任何信号之前进行注册。这个   使你的应用程序的models.py成为一个放置信号注册的好地方   处理程序。