函数编程09--自定义日志函数

自定义日志函数

1)日志基础
a)日志用于详细记录重要的步骤和操作,可供测试人员更好的调试脚本
b)日志可以输出到控制台、文件,也可以同时输出到控制台和文件
c)输出到控制台时,可以代替print
d)日志输出等级
    日志等级由低到高分别是DEBUG、INFO、WARNING、ERROR、CRITICAL
        CRITICAL:特别糟糕的事情,如内存耗尽,磁盘空间为空
        ERROR:发生错误时,如IO操作失败或者连接问题
        WARNING:发生很重要的事情,但并不是错误,是警告信息
        INFO:处理请求或者状态变化等日常事务
        DEBUG:调试过程中使用,如算法中每个循环的中间状态
    设置日志输出等级后,凡是比指定等级高的日志均输出,比指定等级低的日志均不输出
2)日志输出到控制台步骤
导入模块logging:import logging
    使用日志需要导入模块logging
创建日志对象: logger = logging.getLogger()
设置日志输出等级:logger.setLevel(logging.INFO)
    等级INFO、WARNING、ERROR、CRITICAL的日志均会输出
设置日志输出格式:
formater = logging.Formatter('%(asctime)s-%(filename)s - %(lineno)d-%(message)s')
    %s之间的内容全部是关键字,不能改变
    asctime:当前时间(精确到ms)
    filename:模块名
    lineno:行号
    levelname:日志等级
    message:自定义消息
创建日志处理器:console=logging.SteamHandler() #输出控制台
    用于设定日志输出到控制台
设置日志处理器的日志输出格式:console.setFormatter(formater)
    当前时间 - 模块名 - 行号 - 日志等级 - 自定义日志消息
日志处理器增加到日志对象:logger.addHandler(console)
关闭日志处理器:logger.close()
3)使用日志
    假设自定义的日志函数名 log
    log().info('日志消息')
    log().warning('日志消息')
    log().error('日志消息')
    log().critical('日志消息')

4)日志重复输出问题
        原因是没有移除上一个日志处理器
    logger=logging.getLogger()
        若内存中已存在创建的对象,则不会重复创建
    logger.addHandler(console)
        将console添加到logger对象中
        第1次输出日志时,第1个handler添加到logger中
        第2次输出日志时,第2个handler添加到logger中,logger中有2个handler,传递的日志消息都是最新的、相同的,结果相同日志输出2次,依次类推
5)解决日志重复输出方案
如果logger.handlers列表为空,则添加日志处理器,否则直接去写日志
参考代码:
    if not logger.handlers:
        logger.setLevel(logging.INFO)
        formatter = logging.Formatter(...)
        console=logging.StreamHandler()
        console.setFormatter(formatter)
        logger.addHandler(console)
        console.close()
上一篇:logger的日志笔记


下一篇:ShardingCore批量插入