這篇文章將為大家詳細講解有關Django項目怎么正確配置日志,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
當Django項目正式部署上線后,我們需要設置DEBUG = False。這時開發者應怎樣檢查Django程序在生產環境運行時有什么異?;蝈e誤呢?答案就是日志(logging)。在生產環境中,Django默認是不會在服務器上自動生成log文件的,即使程序出現error級別的故障也不會通知管理員。本文將教你如何在Django項目中正確配置日志(logging),讓Django生成log日志文件,并在程序運行發生error級別故障時通知管理員。
日志與我們的軟件程序密不可分。它記錄了程序的運行情況,可以給我們調試程序和故障排查提供非常有用的信息。每一條日志信息記錄了一個事件的發生。具體而言,它包括了:
事件發生時間
事件發生位置
事件的嚴重程度--日志級別
事件內容
日志的級別又分為:
DEBUG:用于調試目的的低級系統信息
INFO:一般系統信息
WARNING:描述已發生的小問題的信息。
ERROR:描述已發生的主要問題的信息。
CRITICAL:描述已發生的嚴重問題的信息。
在Django項目中,我們可以針對日志的不同級別設置不同的處理方式。比如INFO級別及以上的日志我們寫入到log文件里保存,Error級別及以上的日志我們直接通過郵件發送給系統管理員。
Django的日志模塊其實就是python的logging模塊。它由4部分組成:
Logger 記錄儀:生成和記錄每條日志信息及級別
Handler處理程序: 根據日志信息級別交由相應處理程序處理(比如生成文件或發送郵件)
Filters 過濾器:日志交由處理程序處理前需要滿足的過濾條件(比如Debug=True或False)
Formaters 格式化程序:決定每條日志的打印輸出格式,可以有完整版的,也有簡單版的
一個logger記錄儀的例子如下所示。當程序運行出現錯誤時,它生成了一條級別為error的日志信息。這條記錄產生后就會交由Handler處理。
# import the logging library import logging # 獲得logger實例 logger = logging.getLogger(__name__) def my_view(request, arg1, arg): ... if error_happens: # Log an error message logger.error('Something went wrong!')
當Debug=True時,日志信息默認在console輸出?,F在我們還需要在django配置文件里配置日志(logging)相關內容,使得當Debug=False時,日志信息會輸出到日志文件里或發送給系統管理員。
以下基本配置信息在django cookiecutter推薦使用的logging配置信息上做了修改,可適合大部分項目使用。如果真的希望發送和接收到郵件還需在settings.py正確配置電子郵箱Email。
# 給ADMINS發送郵件需要配置 ADMINS = ( ('admin_name','your@gmail.com'), ) MANAGERS = ADMINS # 創建log文件的文件夾 LOG_DIR = os.path.join(BASE_DIR, "logs") # 基本配置,可以復用的 LOGGING = { "version": 1, "disable_existing_loggers": False, "filters": {"require_debug_false": {"()": "django.utils.log.RequireDebugFalse"}}, "formatters": { # 定義了兩種日志格式 "verbose": { # 標準 "format": "%(levelname)s %(asctime)s %(module)s " "%(process)d %(thread)d %(message)s" }, 'simple': { # 簡單 'format': '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s' }, }, "handlers": { # 定義了三種日志處理方式 "mail_admins": { # 只有debug=False且Error級別以上發郵件給admin "level": "ERROR", "filters": ["require_debug_false"], "class": "django.utils.log.AdminEmailHandler", }, 'file': { # Info級別以上保存到日志文件 'level': 'INFO', 'class': 'logging.handlers.RotatingFileHandler', # 保存到文件,根據文件大小自動切 'filename': os.path.join(LOG_DIR,"info.log"), # 日志文件 'maxBytes': 1024 * 1024 * 10, # 日志大小 10M 'backupCount': 2, # 備份數為 2 'formatter': 'simple', # 簡單格式 'encoding': 'utf-8', }, "console": { # 打印到終端console "level": "DEBUG", "class": "logging.StreamHandler", "formatter": "verbose", }, }, "root": {"level": "INFO", "handlers": ["console"]}, "loggers": { "django.request": { # Django的request發生error會自動記錄 "handlers": ["mail_admins"], "level": "ERROR", "propagate": True, # 向不向更高級別的logger傳遞 }, "django.security.DisallowedHost": { # 對于不在 ALLOWED_HOSTS 中的請求不發送報錯郵件 "level": "ERROR", "handlers": ["console", "mail_admins"], "propagate": True, }, }, }
關于“Django項目怎么正確配置日志”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。