logging模塊
Django的日誌使用了python的logging模塊,需要在settings中進行配置
logging模塊由四部分組成
-
記錄器
記錄器配置具有日誌級別。此日誌級別描述了記錄器將處理的消息的嚴重性。Python定義了以下日誌級別:DEBUG: 用於調試目的的低級系統信息
INFO: 一般系統信息
WARNING: 描述已發生的小問題的信息。
ERROR: 描述已發生的主要問題的信息。
CRITICAL: 描述已發生的嚴重問題的信息
-
處理器
處理器是確定記錄器中每條消息發生情況的引擎。它描述了特定的日誌記錄行爲,例如將消息寫入屏幕,文件或網絡套接字。與記錄器一樣,處理器也具有日誌級別。如果日誌記錄的日誌級別未達到或超過處理程序的級別,則處理程序將忽略該消息。
記錄器可以有多個處理器,每個處理器可以具有不同的日誌級別。以這種方式,可以根據消息的重要性提供不同形式的通知。
-
過濾器
過濾器用於提供對日誌記錄從記錄器傳遞到處理程序的附加控制。默認情況下,將處理滿足日誌級別要求的任何日誌消息。但是,通過安裝篩選器,可以在日誌記錄過程中添加其他條件。例如,您可以安裝僅允許ERROR發出來自特定源的消息的過濾器。
過濾器還可用於在發出之前修改日誌記錄。例如,如果滿足一組特定條件,您可以編寫一個過濾器,將ERROR日誌記錄降級 爲WARNING記錄。
過濾器可以安裝在記錄器或處理器上; 可以在鏈中使用多個過濾器來執行多個過濾操作。
-
格式化程序
最終,日誌記錄需要呈現爲文本。格式化程序描述該文本的確切格式。格式化程序通常由包含LogRecord屬性的Python格式化字符串組成 ; 但是,也可以編寫自定義格式化程序來實現特定的格式化行爲。
示例
-
配置
LOG_PATH = 'xx/xx/' LOGGING = { 'version': 1, #定義了配置文件的版本 'disable_existing_loggers': False, ## True表示禁用logger # 格式化 'formatters': { 'default': { 'format': '%(levelname)s %(asctime)s %(module)s %(funcName)s %(msecs)s %(message)s' }, 'simple': { 'format': '%(levelname)s %(message)s' }, }, # 處理日誌的方式 'handlers': { 'v_handlers': { # 級別 'level': 'DEBUG', # 存儲方式 "class": 'logging.handlers.RotatingFileHandler', # 日誌文件大小 'maxBytes': 5 * 1024, 'encoding': 'utf8', # 日誌文件路徑 'filename': '{}salary_all.log'.format(LOG_PATH), # 格式化方式 'formatter': 'default', }, 'error': { 'level': "ERROR", 'class': 'logging.handlers.RotatingFileHandler', 'maxBytes': 5 * 1024, 'encoding': 'utf8', 'filename': '{}salary_error.log'.format(LOG_PATH), 'formatter': 'simple' } }, # 配置日誌的處理方式 'loggers': { 'django': { 'handlers': ['v_handlers'], 'propagate': True, }, 'django.request': { 'handlers': ['error'], 'level': 'ERROR', 'propagate': True } }, # 過濾器 'filters': { } }
- format
format | 解釋 |
---|---|
%(levelno)s | 日誌的級別數字形式 |
%(levelname)s | 日誌級別的名稱 |
%(pathname)s | 當前執行程序的路徑 |
%(filename)s | 當前執行程序名 |
%(funcName)s* | 當前的函數 |
%(lineno)d | 記錄日誌的當前行號 |
%(asctime)s | 日期時間 |
%(msecs)s | 毫秒級的時間 |
%(thread)d | 線程ID |
%(threadName)s | 線程名稱 |
%(process)d | 進程ID |
%(message)s | 記錄的日誌信息 |
參考鏈接:時光不寫博客-Django日誌