【Django】logging日志输出到指定位置(拿来即用)

想必日志对于问题定位的重要性,不言而喻吧
那此章节,我们就来梳理下logging模块日志的相关知识吧

一、logging日志流处理流程 基础知识

1. 四大组件

  1. Logger(日志器): 提供应用程序所使用的接口
  2. Handler(处理器):将logger创建的日志输出到指定的位置,如 文件,console控制台,网络等
  3. Filter(过滤器):更细粒度的控制具体是输出哪条日志
  4. Formatter(格式器):控制日志输出格式

2. 四大组件间关系:

Logger是入口,Handler是真正的执行者,Handler可以通过Filter 和 Formatter对需要输出的日志内容做过滤和格式化。

3.logging模块的日志级别

loggging模块将日志分为以下日志等级

  1. DEBUG: 最详细的日志信息,应用场景:问题诊断
  2. INFO: 关键节点信息,应用场景:记录预期的系统正常工作信息
  3. WARNING: 发生不期望的场景时需记录的信息,用作提示警醒,但是此时系统一切正常
  4. ERROR: 当某个问题产生导致某功能不能正常使用时需记录的信息
  5. CRITICAL:当发生严重的错误,导致系统无法继续正常运行

二、logging模块在Django项目中的应用

1. 日志配置(settings文件)

以下内容配置:控制台日志全部输出到文件、控制台console

import logging

LOGGING = {
    'version': 1,   # 指明dictConnfig的版本,目前就只有一个版本
    'disable_existing_loggers': False,   # 表示是否禁用所有的已经存在的日志配置
    'formatters': {   # 格式器
        'verbose': {
            'format': '[%(asctime)s] [%(levelname)s] %(module)s %(process)s %(thread)s %(message)s',
        },
        'standard': {   # 标准
            'format': '[%(asctime)s] [%(levelname)s] %(message)s',
        },
    },
    # 'filters':{},
    'handlers': {   # 处理器,在这里定义了两个个处理器. 用来定义具体处理日志的方式,可以定义多种,"default"就是默认方式,"console"就是打印到控制台方式。files是写入到文件的方式,注意使用的class不同
        'files': {
            'level': 'INFO',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': './log/run.armand.info.log',  # 日志输出文件
            'formatter': 'verbose',  # 指定formatters日志格式
            'maxBytes': 1024*1024*5,  # 文件大小
            'encoding': 'utf-8',
        },
        'console': {
            'level': 'INFO',
            'class': 'logging.StreamHandler',
            'formatter': 'verbose',
        },
        'default': {
            'level': 'INFO',
            'class': 'logging.FileHandler',
            'filename': './log/all/all.log',  # 日志输出文件
            'formatter': 'standard',  # 使用哪种formatters日志格式
            # 'maxBytes': 1024*1024*5,  # 文件大小  class为logging.FileHandler时不能设置文件大小
            'encoding': 'utf-8',
        },
    },
    'loggers': {  # log记录器,配置之后就会对应的输出日志
        'django': {  # django记录器,它将所有 INFO 或更高等级的消息传递给3个处理程序——files、console 和 default
            'handlers': ['files', 'console', 'default'],  # 同时输出到console和文件
            'level': 'INFO',
            'propagate': True,  # 向上接受更高级别日志
        },
    }
}

2. logging模块使用:

logger = logging.getLogger('django')

logger.info('%s 进入帮助页面', request.user.username)

你可能感兴趣的:(Django,django,python,后端)