日志:记录了执行过程 - 逻辑执行流程
    记录了报错

    1、在代码里,添加日志代码 - 在哪些地方需要你输出日志。info - error - debug….
    2、收集代码中的日志信息,然后输出。

    logging模块
    1)日志收集器
    定义日志收集器:要从代码当中按照要求收集对应的日志,并输出到渠道当中。
    a、要收集哪个级别以上的日志?
    b、日志是要什么样的格式显示?
    c、日志输出到哪些地方去?

    2)日志级别(Level):
    debug - info - warning - error - critical(FATA)
    调试 基本 警告 报错 严重错误
    3)日志输出的格式(Formatter)
    日志、日志级别、代码文件、第几行:信息
    4)日志输出渠道(Handle):
    文件(FileHandle)、控制台(StreamHandle)

    logging模块
    有一个默认的日志收集器,root
    a、收集的是warning及wraning级别以上的日志。
    b、日志格式:日志级别:收集器名字:输出的内容
    c、输出渠道:控制台

    自定义日志收集器
    步骤:1)创建一个日志收集器
    1、调用logger = logging.getLogger(日志名字)来生成一个日志收集器对象
    2、设置你的日志收集级别。logger.setLevel(日志级别)
    3、使用logging.Formatter类来定制要输出的控制台/文件当中的日志格式
    4、使用handle1 = logging.StreamHandler()来创建一个控制台渠道对象,并将控制台要输出的格式日志设置为3当中的formatter。设置handle1 = logging.StreamHandler(Formatter对象)
    5、将4当中的handle1添加到logger当中,那么日志就可以输出控制台当中
    6、使用handle2 = logging.StreamHandler(文件路径)来创建一个控制台渠道对象,并将控制台要输出的格式日志设置为3当中的formatter。设置handle2 = logging.StreamHandler(Formatter对象)
    7、将6当中的handle2添加到logger当中,那么日志就可以输出文件当中
    ——指定日志级别在指定文件输出
    8、使用handle3 = logging.StreamHandler(文件路径)来创建一个控制台渠道对象,并将控制台要输出的格式日志设置为3当中的formatter。设置handle3 = logging.StreamHandler(Formatter对象)
    指定handle3的日志级别为ERROR
    handle3.setLevel(logging.error)
    9、将8当中的handle3添加到logger当中,那么日志就可以输出文件当中

    例子:
    import logging
    _# 第一步:
    # 创建一个日志收集器
    _logger = logging.getLogger(“nmb-py37”)

    # 第二步
    # 自定义要收集的日志级别、自定义收集日志的格式、自定义输出渠道
    # 自定义要收集日志的级别
    logger.setLevel(logging.INFO)
    fmt_str = **”%(asctime)s %(name)s %(levelname)s %(filename)s %(lineno)d %(message)s”
    # 实例化一个日志格式类
    _formatter = logging.Formatter(fmt_str)

    _# 实例化渠道(Handle).
    # 控制台(StreamHandler)
    _handle1 = logging.StreamHandler()

    _# 实例化渠道(Handle).设置渠道当中的日志显示格式
    _handle1.setFormatter(formatter)

    _# 将渠道与日志收集器绑定起来
    _logger.addHandler(handle1)

    _# 文件渠道
    _handle2 = logging.FileHandler(“py37.log”,encoding=“utf-8”)

    _# 实例化渠道(Handle).设置渠道当中的日志显示格式
    _handle2.setFormatter(formatter)

    _# 将渠道与日志收集器绑定起来
    _logger.addHandler(handle2)

    _# 文件渠道
    _handle3 = logging.FileHandler(“py37-error.log”,encoding=“utf-8”)

    # 实例化渠道(Handle).设置渠道当中的日志显示格式
    _handle3.setFormatter(formatter)
    # 设置handle3的日志输出级别为ERROR
    _handle3.setLevel(logging.ERROR)

    _# 将渠道与日志收集器绑定起来
    _logger.addHandler(handle3)

    logger.info(“hello!!”)
    logger.error(“你错了!!”)

    日志文件滚动生成
    # handlers.RotatingFileHandler 根据文件大小
    # handlers.TimedRotatingFileHandler 根据时间间隔

    只需要修改:# 文件渠道
    _handle2 = handlers.RotatingFileHandler(“py37.log”,maxBytes=1, backupCount=10,encoding=“utf-8”)
    from logging import handlers
    import logging
    # 第一步:
    # 创建一个日志收集器
    _logger = logging.getLogger(“nmb-py37”)

    # 第二步
    # 自定义要收集的日志级别、自定义收集日志的格式、自定义输出渠道
    # 自定义要收集日志的级别
    logger.setLevel(logging.INFO)
    fmt_str = **”%(asctime)s %(name)s %(levelname)s %(filename)s %(lineno)d %(message)s”
    # 实例化一个日志格式类
    _formatter = logging.Formatter(fmt_str)

    _# 实例化渠道(Handle).
    # 控制台(StreamHandler)
    _handle1 = logging.StreamHandler()

    _# 实例化渠道(Handle).设置渠道当中的日志显示格式
    _handle1.setFormatter(formatter)

    _# 将渠道与日志收集器绑定起来
    _logger.addHandler(handle1)

    _# 文件渠道
    _handle2 = handlers.RotatingFileHandler(“py37.log”,maxBytes=1, backupCount=10,encoding=“utf-8”)

    _# 实例化渠道(Handle).设置渠道当中的日志显示格式
    _handle2.setFormatter(formatter)

    _# 将渠道与日志收集器绑定起来
    _logger.addHandler(handle2)

    logger.info(“hello!!”)
    logger.error(“你错了!!”)
    logger.info(“helloppp!!”)
    logger.error(“你错了vvv!!”)
    logger.info(“hello!!”)
    logger.error(“你错了!!”)