日志使用的流程:
1.先要在settings.py 中加入日志的配置
LOGGING = { 'version': 1, 'disable_existing_loggers': False, # 是否禁用已經存在的日至實例(diango自帶的報錯),一般不禁用 'formatters': { # 定義輸出日志的格式 'standard': { # 格式名字可以隨意定義 'format': '[%(levelname)s][%(asctime)s][%(filename)s][%(funcName)s][%(lineno)d] > %(message)s' # 定義信息格式,自己隨便定義,都有什么內容查看下邊內容 }, 'simple': { 'format': '[%(levelname)s]> %(message)s' }, }, 'filters': { 'require_debug_true': { # 只有在settings中的debug=True的時候才會生效 '()': 'django.utils.log.RequireDebugTrue', # 指定過濾器但是不知道是干什么的沒研究明白 }, }, 'handlers': { # 都叫這個為控制器,控制是什么樣的記錄方式等的一些參數 'default': { 'level': 'DEBUG', # 日志級別 'class': 'logging.handlers.RotatingFileHandler', # 定義日志的切分格式,以及輸出方式 'filename': os.path.join(LOGS_DIR, 'django.log'), # 日志文件,請確保修改'filename'路徑為運行Django應用的用戶有權限寫入的一個位置 'maxBytes': 1024 * 1024 * 5, # 5 MB 文件大小 'backupCount': 60, # 備份份數 'formatter': 'standard', # 使用哪種日志格式 }, 'console': { 'level': 'DEBUG', 'filters': ['require_debug_true'], 'class': 'logging.StreamHandler', # 輸出到控制台,這個類指定的不同輸出方式不一樣,下邊是這個地方指定的類所需要的參數 'formatter': 'simple' }, 'file': { 'level': 'DEBUG', 'class': 'logging.handlers.TimedRotatingFileHandler', # TimedRotatingFileHandler的參數, 其他博客上說這個類可以按照日期分割日志,但是我沒試出來 # 參照https://docs.python.org/3/library/logging.handlers.html#timedrotatingfilehandler # 目前設定每天一個日志文件 'filename': os.path.join(LOGS_DIR, 'django.log'), 'when': 'midnight', 'interval': 1, 'backupCount': 60, 'formatter': 'standard' }, # 'file_handler': { # 'level': 'INFO', # 'class': 'logging.handlers.TimedRotatingFileHandler', # 'filename': os.path.join(LOGS_DIR, 'django.log'), # 'formatter': 'standard' # }, # 用於文件輸出 }, 'loggers': { # 都叫這個容器,配置上容器內使用什么控制器記錄日志,后邊實例化時getLogger內寫的就是這個里面的某個容器名 'django': { 'handlers': ['default', 'console'], 'level': 'DEBUG', 'propagate': True, }, 'django.everyday': { 'handlers': ['file', 'console'], 'level': 'DEBUG', 'propagate': True, }, # 'django.request': { # 'handlers': ['mail_admins'], # 'level': 'ERROR', # 'propagate': False, # }, } }
上邊提到的信息輸出格式都有以下內容:
格式 | 描述 |
%(name)s | 記錄器的名稱 |
%(levelno)s | 數字形式的日志記錄級別 |
%(levelname)s | 日志記錄級別的文本名稱 |
%(filename)s | 執行日志記錄調用的源文件的文件名稱 |
%(pathname)s | 執行日志記錄調用的源文件的路徑名稱 |
%(funcName)s | 執行日志記錄調用的函數名稱 |
%(module)s | 執行日志記錄調用的模塊名稱 |
%(lineno)s | 執行日志記錄調用的行號 |
%(created)s | 執行日志記錄的時間 |
%(asctime)s | 日期和時間 |
%(msecs)s | 毫秒部分 |
%(thread)d | 線程ID |
%(threadName)s | 線程名稱 |
%(process)d | 進程ID |
%(message)s | 記錄的消息 |
2.去視圖中實例化一個日志記錄的對象
logger = logging.getLogger("django.everyday")
實例化時傳入的參數應該是配置文件內loggers容器內聲明好的容器
3.實例化對象后在需要輸出日志的地方寫上輸出語句
logger.info(msg)
logger.error(e)
logger有不同的信息,調用不同方法寫入不同的類型的信息
一般info是正常信息,warning是警告信息,error是錯誤信息,常用的就這些
注:
如果想要django自動記錄一些內容需要在loggers中配置上名字叫django的容器,這樣django才會自動將規定等級以上的信息寫入日志