2011-05-30 260 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