Django實戰-日誌

  • 2019 年 10 月 4 日
  • 筆記

Django網路應用開發的5項基礎核心技術包括模型(Model)的設計,URL 的設計與配置,View(視圖)的編寫,Template(模板)的設計和Form(表單)的使用。

Django使用python自帶的 logging 作為日誌列印工具。logging 是執行緒安全,其主要由4部分組成:

  • Formatters

控制日誌的格式

  • Filters

控制哪些日誌可以從 logger 流向 Handler

  • Handlers

控制日誌輸出到哪裡,console,file…

一個 logger 可以有多個Handler

  • Loggers

用戶使用的直接介面,將日誌傳遞給Handler

一、settings.py 配置

設置 log 文件,如果不存在就新建 log 文件夾

LOG_DIR = os.path.join(BASE_DIR, "log")  if not os.path.exists(LOG_DIR):      os.makedirs(LOG_DIR)
LOGGING = {      # version為 1 ,定義了配置文件的版本,當前版本號為1.0      "version": 1.0,      # 日誌格式 % s 字元串,格式器      "formatters": {          # 詳細的日誌格式          "standard": {              "format": "%(asctime)s [%(threadName)s: %(thread)d]"                          "%(pathname)s:%(funcName)s:%(lineno)d %(levelname)s - %(message)s"          },          # 簡單的日誌格式          "simple": {              "format": "%(asctime)s %(message)s"          }      },      "filters": {          # 配置過濾器的名字          "test": {              "()": "ops.TestFilter",          }      },      # 格式器      "handlers": {          # 終端處理器          "console_handler": {              "level": "INFO",              "class": "logging.StreamHandler",              "formatter": "standard"          },          # 文件處理器 RotatingFileHandler 循環文件處理器          "file_handler": {              "level": "DEBUG",              "class": "logging.handlers.RotatingFileHandler",              # 指定路徑的名字              "filename": os.path.join(LOG_DIR, "backend.log"),              "maxBytes": 1024*1024*1024,              # 保存的備份數量              "backupCount": 5,              "formatter": "standard",              "encoding": "utf8"          },          # 統計,產生文件          "statistics_handler": {              "level": "DEBUG",              "class": "logging.handlers.RotatingFileHandler",              # 指定路徑的名字              "filename": os.path.join(LOG_DIR, "statistics.log"),              "maxBytes": 1024*1024*5,              # 保存的備份數量              "backupCount": 5,              "formatter": "simple",              "encoding": "utf8"          }      },      "loggers": {          # 日誌的名字          "django": {              "handlers": ["console_handler", "file_handler"],              "filters": ['test'],              "level": "DEBUG"          },          "statistics": {              "handlers": ["statistics_handler"],              "level": "DEBUG"          }      }  }