2012-03-06 84 views
2

我正在使用Django創建一個API。每個視圖都以JSON響應。我想記錄每個HttpResponse JSON到dev服務器輸出。Django開發日誌記錄HttpResponses到dev服務器

到目前爲止,我還添加了一個處理程序:

'console': { 
     'level':'DEBUG', 
     'class':'logging.StreamHandler', 
} 

,然後添加一個記錄:

'to_console': { 
     'handlers': ['console'], 
     'level': 'DEBUG', 
    } 

在我看來,我得到的記錄logger = logging.getLogger('to_console')

和每個JSON響應logger.debug(json_str)

對於第一個看法,這很好。但是我想知道是否可以在將應用程序部署到生產環境時關閉調試功能。它看起來像https://docs.djangoproject.com/en/dev/topics/logging/#django.utils.log.RequireDebugFalse可以工作。但那麼這會導致我的代碼充斥着這些日誌語句。我從來不需要記錄這樣的事情,所以我想知道最可維護的方式是什麼。

什麼是處理開發日誌的正確方法,以便在代碼生產時可以「關閉」?還是有某種內置的功能或應用程序,我缺少自動記錄所有HttpResponse的開發服務器?

回答

2

可以通過改變您提供給日誌記錄的配置來關閉和打開日誌功能。你可能會認爲日誌語句是「亂拋垃圾」的代碼,但是一旦服務器運行在生產環境中,除了日誌以外,(通常)除了日誌之外還有很少的方法可以知道里面發生了什麼。

如有必要,您可以向正在運行的服務器發送包含新配置的JSON數據的POST,然後由處理POST請求的視圖生效。但建議將日誌記錄留在原地,因爲當日志記錄級別沒有實際輸出時,它們相當便宜(正如您所預料的那樣,寫入控制檯/文件/套接字的實際I/O佔用了大部分時間時間,但如果級別設置得足夠高,則實際輸出很少或沒有)。

當一切在開發和測試中運行良好,但在生產中無法完成失敗時,日誌記錄有時可能是唯一可用的診斷工具。

我認爲RequireDebugFalse的使用對於你描述的場景來說是非常合理的,但你也可以編寫你自己的過濾器,它更符合你的特定需求(編寫過濾器很容易)。

相關問題