2011-05-30 188 views
3

因此,我们用django创建了一个应用程序,并且每次获取请求时都会在控制台上打印所有这些http响应消息。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的内部网络服务器仅用于开发,而不是用于生产,但我们希望获得与开发版本本身相当的速度(无需进入部署django的复杂背后阿帕奇/ lighttpd的)。

+2

这太糟糕了...... – Nemoden 2011-05-30 10:24:11

+1

我知道打印速度可能会很慢,但除非您每个页面做数千个请求我真的不认为你会从这些关闭中受益。而且如果你做了成千上万的请求,即使在正确的Web服务器上也会很慢。 – 2011-05-30 10:45:33

+6

“......我们希望能够获得与开发版本本身相当的速度......”BWAHAHA。 – 2011-05-30 11:38:24

回答

2

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

+0

这比这更复杂一点,因为gunicorn不会在对项目的.py文件进行更改时自动启动,所以你必须手动设置重启。 – Blaise 2014-09-01 11:16:42

1

您可以让控制台日志功能,但这个小补丁可以防止诸如

GET /urlpath/..blah blah ' 200 216 
... 

完全,这所有有HTTP结果代码的嘈杂线= 200 在您的网站,包或VIRTUALENV(如果你使用它)目录,进入文件夹结构的Django /核心/服务器/ basehttp.py

然后转到 类WSGIRequestHandler, 功能高清log_message(个体经营,格式,*参数)

# 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,我感兴趣的是一个干净的定制,也:-)

+1

这对我来说工作得很好。我总是犹豫修改库代码,但在这种情况下,似乎完全合理。我发现我也对防止显示“304”响应感兴趣;而不是'如果args [1] =='200':'我用'如果['200','304',]:'中的args [1]。这个答案应该被接受。 – 2015-12-01 20:32:26