欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-10 12:31:36
是程序产生的日志 程序员自定义设置的 收集器和渠道级别那个高就以那个级别输出 日志和报告的作用: 报告的重点在于执行结果(执行成功失败,多少用例覆盖),返回结果 日志的重点在执行过程当中,异常点,哪里失败,哪里报错,诊断代码 logging 模块的基本使用 import logging # Pyth ......
  • 是程序产生的日志
  • 程序员自定义设置的
  • 收集器和渠道级别那个高就以那个级别输出
  • 日志和报告的作用:
    • 报告的重点在于执行结果(执行成功失败,多少用例覆盖),返回结果  
    • 日志的重点在执行过程当中,异常点,哪里失败,哪里报错,诊断代码  

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级别的日志")

 

 

*******请大家尊重原创,如要转载,请注明出处:转载自:   谢谢!!*******