• Python 中 对 logging 模块进行封装,记录bug日志、日志等级


    • 是程序产生的日志
    • 程序员自定义设置的
    • 收集器和渠道级别那个高就以那个级别输出
    • 日志和报告的作用:
      • 报告的重点在于执行结果(执行成功失败,多少用例覆盖),返回结果  
      • 日志的重点在执行过程当中,异常点,哪里失败,哪里报错,诊断代码  

    logging 模块的基本使用

    import logging  # Python内置的日志模块
    
    # 1. 定义日志收集器,使用.getLogger(译:老哥儿)方法,收集器的名字case
    case_logger = logging.getLogger("case")  # 会创建一个 Logger 对象
    
    # 2. 指定日志收集器的日志等级,使用 logging 对象中.setLevel (译:赛特。莱欧)方法
    # NOTSET(0), DEBUG(10), INFO(20)--, WARNING(30), ERROR(40), CRITICAL(50)
    
    # 方法一 setLevel(赛特。莱欧)
    # case_logger.setLevel(logging.DEBUG)   # 只能收集当前等级和当前等级以上级别的日志
    # 方法二 setLevel(赛特。莱欧)
    case_logger.setLevel("DEBUG")
    
    # 3. 定义日志输出渠道
    # 输出到控制台,使用 logging(老根)当中的.StreamHandler(丝锥木汗都)
    console_handle = logging.StreamHandler()     # Handler对象
    
    # 输出到文件,使用 logging(老根)当中的.FileHandler(发偶。憨豆)方法,(指定文件名, 默认a以追加的方式,)
    file_handle = logging.FileHandler("cases.log", encoding="utf-8")
    
    # 4. 指定日志输出渠道的日志等级,使用对象.setLevel(赛特。莱欧)方法
    console_handle.setLevel(logging.ERROR)
    file_handle.setLevel(logging.INFO)
    
    # 5. 定义日志显示的格式,logging(老根)当中的 Formatter(佛梅特) 函数
    # 简单点的格式
    simple_formatter = logging.Formatter('%(asctime)s - [%(levelname)s] - [msg]: %(message)s')
    # 详细的格式
    verbose_formatter = logging.Formatter('%(asctime)s - [%(levelname)s] - [msg]: %(message)s - %(name)s - %(lineno)d')
    
    # 控制台显示简洁的日志,setFormatter(赛特否梅特)函数
    console_handle.setFormatter(simple_formatter)
    # 日志文件中显示详细日志
    file_handle.setFormatter(verbose_formatter)
    
    # 6. 对接, 将日志收集器与输出渠道对接,收集器中 addHandler(按得,憨豆)函数
    case_logger.addHandler(console_handle)
    case_logger.addHandler(file_handle)

    日志等级

    • NOTSET(0):(译:闹特赛特):相当没级别
    • DEBUG(10):(译:滴bug):在调试阶段,业务系统还没有上线
    • INFO(20):(译:in否):正常的提示信息,普通的提示信息
    • WARNING(30):(译:外流):警告,没有错,不会导致系统中断,程序正常进行,会出现某个警告
    • ERROR(40):(译:哎歪):系统出现错误,影响系统功能
    • CRITICAL(50):(译:快特扣):最严重的的错误,会导致程序中断

    日志显示的格式

    • %(asctime)s :显示时间
    • %(created)f:创建日期
    • %(filename)s : 日志的名称
    • %(funcName)s : 函数的名称
    • %(levelname)s : 日志等级
    • %(levelno)s:日志级别
    • %(lineno)d : 报错行号
    • %(message)s : 具体的日志详情信息
    • %(module)s : 那个模块的报错
    • %(name)s : 收集器的名字

    logging 模块的封装

    # 封装处理日志的类
    import logging
    from danyuan.handle_config import do_config     # 从配置文件中获取
    
    
    class HandleLog:
        """
        封装处理日志的类
        """
        def __init__(self):
            # 1. 定义日志收集器
            self.case_logger = logging.getLogger(do_config.get_value("log", "logger_name"))
    
            # 2. 指定日志收集器的日志等级
            self.case_logger.setLevel(do_config.get_value("log", "logger_level"))
    
            # 3. 定义日志输出渠道
            console_handle = logging.StreamHandler()  # 定义日志输出到控制台
            file_handle = logging.FileHandler(do_config.get_value("log", "log_filename"), encoding="utf-8")     # 定义日志输出到文件
    
            # 4. 指定日志输出渠道的日志等级
            console_handle.setLevel(do_config.get_value("log", "console_level"))
            file_handle.setLevel(do_config.get_value("log", "file_level"))
    
            # 5. 定义日志显示的格式
            simple_formatter = logging.Formatter(do_config.get_value("log", "simple_formatter"))    # 简单点的格式
            verbose_formatter = logging.Formatter(do_config.get_value("log", "verbose_formatter"))  # 详细的格式
    
            console_handle.setFormatter(simple_formatter)   # 控制台显示简洁的日志
            file_handle.setFormatter(verbose_formatter)     # 日志文件中显示详细日志
    
            # 6. 对接, 将日志收集器与输出渠道对接
            self.case_logger.addHandler(console_handle)
            self.case_logger.addHandler(file_handle)
    
        def get_logger(self):
            """
            获取logger日志对象
            :return:
            """
            return self.case_logger
    
    
    # do_log = HandleLog().get_logger()       # 实例化对象
    
    if __name__ == '__main__':
        do_log = HandleLog()
        case_logger = do_log.get_logger()
        case_logger.debug("这是一个debug级别的日志")  # 手动记录日志
        case_logger.info("这是一个info级别的日志")
        case_logger.warning("这是一个warning级别的日志")
        case_logger.error("这是一个error级别的日志")
        case_logger.critical("这是一个critical级别的日志")

    *******请大家尊重原创,如要转载,请注明出处:转载自:https://www.cnblogs.com/shouhu/   谢谢!!******* 

  • 相关阅读:
    谨慎的覆盖clone()方法
    siverlight 实现神奇罗盘
    Java读取一个目录(文件夹)下的文件例子
    关于 Web 字体:现状与未来
    logistic回归
    泸沽湖的介绍
    with grant option与with admin option区别
    sqlldr日期格式
    对List顺序,逆序,随机排列实例代码
    索引组织表(IOT)
  • 原文地址:https://www.cnblogs.com/shouhu/p/12157279.html
Copyright © 2020-2023  润新知