目錄
- 日志基礎知識
- Django的日志模塊
- settings.py推薦日志配置信息
當Django項目正式部署上線后,我們需要設置DEBUG = False。這時開發(fā)者應怎樣檢查Django程序在生產(chǎn)環(huán)境運行時有什么異?;蝈e誤呢?答案就是日志(logging)。在生產(chǎn)環(huán)境中,Django默認是不會在服務器上自動生成log文件的,即使程序出現(xiàn)error級別的故障也不會通知管理員。本文將教你如何在Django項目中正確配置日志(logging),讓Django生成log日志文件,并在程序運行發(fā)生error級別故障時通知管理員。
日志基礎知識
日志與我們的軟件程序密不可分。它記錄了程序的運行情況,可以給我們調試程序和故障排查提供非常有用的信息。每一條日志信息記錄了一個事件的發(fā)生。具體而言,它包括了:
- 事件發(fā)生時間
- 事件發(fā)生位置
- 事件的嚴重程度--日志級別
- 事件內容
日志的級別又分為:
- DEBUG:用于調試目的的低級系統(tǒng)信息
- INFO:一般系統(tǒng)信息
- WARNING:描述已發(fā)生的小問題的信息。
- ERROR:描述已發(fā)生的主要問題的信息。
- CRITICAL:描述已發(fā)生的嚴重問題的信息。
在Django項目中,我們可以針對日志的不同級別設置不同的處理方式。比如INFO級別及以上的日志我們寫入到log文件里保存,Error級別及以上的日志我們直接通過郵件發(fā)送給系統(tǒng)管理員。
Django的日志模塊
Django的日志模塊其實就是python的logging模塊。它由4部分組成:
- Logger 記錄儀:生成和記錄每條日志信息及級別
- Handler處理程序: 根據(jù)日志信息級別交由相應處理程序處理(比如生成文件或發(fā)送郵件)
- Filters 過濾器:日志交由處理程序處理前需要滿足的過濾條件(比如Debug=True或False)
- Formaters 格式化程序:決定每條日志的打印輸出格式,可以有完整版的,也有簡單版的
一個logger記錄儀的例子如下所示。當程序運行出現(xiàn)錯誤時,它生成了一條級別為error的日志信息。這條記錄產(chǎn)生后就會交由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(xiàn)在我們還需要在django配置文件里配置日志(logging)相關內容,使得當Debug=False時,日志信息會輸出到日志文件里或發(fā)送給系統(tǒng)管理員。
settings.py推薦日志配置信息
以下基本配置信息在django cookiecutter推薦使用的logging配置信息上做了修改,可適合大部分項目使用。如果真的希望發(fā)送和接收到郵件還需在settings.py正確配置電子郵箱Email。
# 給ADMINS發(fā)送郵件需要配置
ADMINS = (
('admin_name','your@gmail.com'),
)
MANAGERS = ADMINS
# 創(chuàng)建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級別以上發(fā)郵件給admin
"level": "ERROR",
"filters": ["require_debug_false"],
"class": "django.utils.log.AdminEmailHandler",
},
'file': { # Info級別以上保存到日志文件
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler', # 保存到文件,根據(jù)文件大小自動切
'filename': os.path.join(LOG_DIR,"info.log"), # 日志文件
'maxBytes': 1024 * 1024 * 10, # 日志大小 10M
'backupCount': 2, # 備份數(shù)為 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發(fā)生error會自動記錄
"handlers": ["mail_admins"],
"level": "ERROR",
"propagate": True, # 向不向更高級別的logger傳遞
},
"django.security.DisallowedHost": { # 對于不在 ALLOWED_HOSTS 中的請求不發(fā)送報錯郵件
"level": "ERROR",
"handlers": ["console", "mail_admins"],
"propagate": True,
},
},
}
以上就是Django項目如何正確配置日志(logging)的詳細內容,更多關于Django 正確配置日志的資料請關注腳本之家其它相關文章!
您可能感興趣的文章:- Python Django框架實現(xiàn)應用添加logging日志操作示例
- Django 使用logging打印日志的實例
- Django日志模塊logging的配置詳解
- Django日志及中間件模塊應用案例
- django實現(xiàn)日志按日期分割
- django日志默認打印request請求信息的方法示例
- Django在Model保存前記錄日志實例
- 如何在django中添加日志功能
- 基于Django實現(xiàn)日志記錄報錯信息
- Django多進程滾動日志問題解決方案
- Django使用uwsgi部署時的配置以及django日志文件的處理方法