­

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"          }      }  }