20.Django日志

日志是一种可以追踪某些软件运行时所发生事件的方法,同时也是程序员找错的重要依据。

通常日志的级别:

  • DEBUG
  • INFO
  • NOTICE
  • WARNING
  • ERROR
  • CRITICAL
  • ALERT
  • EMERGENCY

logging模块是Python的一个标准库模块, 由标准库模块提供日志记录API的关键好处是所有Python模块都可以使用这个日志记录功能

函数 说明
logging.debug(msg, args, *kwargs) 创建一条严重级别为DEBUG的日志记录
logging.info(msg, args, *kwargs) 创建一条严重级别为INFO的日志记录
logging.warning(msg, args, *kwargs) 创建一条严重级别为WARNING的日志记录
logging.error(msg, args, *kwargs) 创建一条严重级别为ERROR的日志记录
logging.critical(msg, args, *kwargs) 创建一条严重级别为CRITICAL的日志记录
logging.log(level, args, *kwargs) 创建一条严重级别为level的日志记录
logging.basicConfig(**kwargs) 对root logger进行一次性配置
import logging

logging.debug("This is a debug log.")
logging.info("This is a info log.")
logging.warning("This is a warning log.")
logging.error("This is a error log.")
logging.critical("This is a critical log.")

django中的使用 在setting.py中添加配置

OGGING = {
    'version': 1,  # 保留的参数,默认是1
    'disable_existing_loggers': False,  # 是否禁用已经存在的logger实例
    # 日志输出格式的定义
    'formatters': {
        'standard': {  # 标准的日志格式化
            'format': '%(levelname)s %(asctime)s %(module)s %(message)s'
        },
        'error': {     # 错误日志输出格式
            'format': '%(levelname)s %(asctime)s %(pathname)s %(module)s %(message)s'
        },
        'simple': {
            'format': '%(levelname)s %(asctime)s %(message)s'
        },
        'collect': {
            'format': '%(message)s'
        }
    },
    # 处理器:需要处理什么级别的日志及如何处理
    'handlers': {
        # 将日志打印到终端
        'console': {
            'level': 'DEBUG',                  # 日志级别
            'class': 'logging.StreamHandler',  # 使用什么类去处理日志流
            'formatter': 'simple'              # 指定上面定义过的一种日志输出格式
        },
        # 默认日志处理器
        'default': {
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件,自动切
            'filename': os.path.join(os.path.join(BASE_DIR, "logs"), "xx.log"),  # 日志文件路径
            'maxBytes': 1024 * 1024 * 100,  # 日志大小 100M
            'backupCount': 5,  # 日志文件备份的数量
            'formatter': 'standard',  # 日志输出格式
            'encoding': 'utf-8',
        },
        # 日志处理级别warn
        'warn': {
            'level': 'WARN',
            'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件,自动切
            'filename': os.path.join(os.path.join(BASE_DIR, "logs"), "warn.log"),  # 日志文件路径
            'maxBytes': 1024 * 1024 * 100,  # 日志大小 100M
            'backupCount': 5,  # 日志文件备份的数量
            'formatter': 'standard',  # 日志格式
            'encoding': 'utf-8',
        },
        # 日志级别error
        'error': {
            'level': 'ERROR',
            'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件,自动切
            'filename': os.path.join(os.path.join(BASE_DIR, "logs"), "error.log"),  # 日志文件路径
            'maxBytes': 1024 * 1024 * 100,  # 日志大小 100M
            'backupCount': 5,
            'formatter': 'error',  # 日志格式
            'encoding': 'utf-8',
        },
    },

    'loggers': {
        # 默认的logger应用如下配置
        '': {
            'handlers': ['default', 'warn', 'error'],
            'level': 'DEBUG',
            'propagate': True,  # 如果有父级的logger示例,表示不要向上传递日志流
        },
        'collect': {
            'handlers': ['console', 'default', 'warn', 'error'],
            'level': 'INFO',
        }
    },
}

views.py或者其他文件都可

import logging

logger = logging.getLogger(__name__)

def index(request):
    logger.info('this is a log')
    return render(request, 'index.html')
声明:原创文章,版权所有,转载请注明出处,https://litets.com。