Django:关闭http响应消息的控制台输出

时间:2011-05-30 10:19:05

标签: python django http response

因此我们使用django创建了一个应用程序,并在每次获取请求时在控制台上打印所有这些http响应消息。

[Date String] 'GET /urlpath/..blah blah ' 200 216
[Date String] 'DELETE /anotherurl/..blah blah ' 200 205 
...
..

我们已禁用所有记录器输出。设置Debug = False。试过'python manage.py runserver --verbosity 0'。甚至尝试将sys.stdout更改为NullDevice()类。然而,我们似乎无法关闭这些响应消息,这些消息正在减慢服务器的速度。所有其他消息都会被关闭,除了这些消息。有什么建议?

我意识到django内部网络服务器仅用于开发,而不是用于生产,但我们希望通过开发版本本身获得相当快的速度(无需进入在Apache之后部署django的复杂性) / lighttpd的)。

3 个答案:

答案 0 :(得分:2)

内置开发服务器不是为性能而设计的,而是使用gunicorn。您可以将其作为应用程序添加到Django项目中,它将为您提供run_gunicorn命令,作为runserver的替代方案。它比内置开发服务器更快,响应更快。如果您愿意,还可以使用--log-level设置gunicorn的日志记录级别。部署起来也相当简单,适合生产。

答案 1 :(得分:1)

您可以让控制台日志记录开启,但是使用这个小补丁你可以抑制像

这样的噪音线
GET /urlpath/..blah blah ' 200 216
...

完全,所有的HTTP结果代码= 200。 在您的Site-packages或VirtualEnv(如果您正在使用它)目录中,转到文件夹结构django / core / servers / basehttp.py

然后转到 类 WSGIRequestHandler , 函数def log_message (self,format,* args)

# Don't bother logging requests for admin images or the favicon.
if (self.path.startswith(self.admin_media_prefix)
        or self.path == '/favicon.ico'):
    return

插入

# START ----- Don't show page requests which have run successfully
if args[1] == '200':
    return
# END ----- Don't show page requests which have run successfully

对于Python 2.7.3,Django 1.4.3来说,这是一个肮脏的解决方法,我对干净的自定义感兴趣,还: - )

答案 2 :(得分:1)

您只需要添加到 Django 日志记录设置中即可:

main

您可以覆盖 Django 的默认记录器:https://github.com/django/django/blob/32265361279b3316f5bce8efa71f2049409461e3/django/utils/log.py#L18

Django 的默认内置记录器的工作原理:https://docs.djangoproject.com/en/1.10/topics/logging/#id3

使用自定义 CallbackFilter 过滤器:https://docs.djangoproject.com/en/1.10/topics/logging/#django.utils.log.CallbackFilter