美文网首页测试工具
Python之logging模块

Python之logging模块

作者: 冲锋丘丘人 | 来源:发表于2019-04-30 11:46 被阅读0次

    前言

    在介绍logging模块的日志流处理流程之前,我们先来介绍下logging模块的四大组件:

    组件名称 对应类名 功能描述
    日志器 Logger 提供了应用程序可一直使用的接口
    处理器 Handler 将logger创建的日志记录发送到合适的目的输出
    过滤器 Filter 提供了更细粒度的控制工具来决定输出哪条日志记录,丢弃哪条日志记录
    格式器 Formatter 决定日志记录的最终输出格式

    logging模块就是通过这些组件来完成日志处理的,上面所使用的logging模块级别的函数也是通过这些组件对应的类来实现的。

    这些组件之间的关系描述:

    • 日志器(logger)需要通过处理器(handler)将日志信息输出到目标位置,如:文件、sys.stdout、网络等;
    • 不同的处理器(handler)可以将日志输出到不同的位置;
    • 日志器(logger)可以设置多个处理器(handler)将同一条日志记录输出到不同的位置;
    • 每个处理器(handler)都可以设置自己的过滤器(filter)实现日志过滤,从而只保留感兴趣的日志;
    • 每个处理器(handler)都可以设置自己的格式器(formatter)实现同一条日志以不同的格式输出到不同的地方。

    简单点说就是:日志器(logger)是入口,真正干活儿的是处理器(handler),处理器(handler)还可以通过过滤器(filter)和格式器(formatter)对要输出的日志内容做过滤和格式化等处理操作。

    实例

    对于logging模块,我研究的也不是很透彻,但是封装调用还是很OK的,直接上代码

    #封装logging
    import os,logging
    from logging.handlers import TimedRotatingFileHandler
    
    def mylog(logpath):
        # 创建一个名字叫test_logger的日志记录器
        log = logging.getLogger("test_logger")
        log.setLevel(logging.INFO) #设置记录器日志等级
        # 创建一个日志处理器
        ## 这里需要正确填写路径(默认以a+的形式打开文件,在文件末尾添加日志,不存在则创建)
        fileHandler = logging.FileHandler(filename = logpath+"/filelog"+".log")
        timeHandler = TimedRotatingFileHandler(logpath+'timelog',"M",2,3)
    '''
    TimedRotatingFileHandler(filename [,when [,interval [,backupCount]]])
    when 是一个字符串的定义如下:
    “S”: Seconds
    “M”: Minutes
    “H”: Hours
    “D”: Days
    “W”: Week day (0=Monday)
    “midnight”: Roll over at midnight
    
    interval 是指等待多少个单位when的时间后,Logger会自动重建文件,当然,这个文件的创建,取决于filename+suffix,若这个文件跟之前的文件有重名,则会自动覆盖掉以前的文件,所以有些情况suffix要定义的不能因为when而重复。比如:when=’D’,interval=1,表示每天产生一个日志文件
    
    backupCount 是保留日志个数。默认的0是不会自动删除掉日志。若设10,则在文件的创建过程中,库会判断是否有超过这个10,若超过,则会从最先创建的开始删除。
    '''
        ## 设置处理器日志级别
        fileHandler.setLevel(logging.INFO)
        timeHandler.setLevel(logging.INFO)
        # 创建一个日志格式器
        file_formats = logging.Formatter('%(asctime)s--%(filename)s--%(funcName)s--%(levelname)s: %(message)s')
        time_formats = logging.Formatter('%(asctime)s--%(filename)s--%(levelname)s: %(message)s',datefmt='[%Y/%m/%d %H/%M/%S]')
    
        # 将日志格式器添加到日志处理器中
        fileHandler.setFormatter(file_formats)
        timeHandler.setFormatter(time_formats)
        # 将日志处理器添加到日志记录器中
        log.addHandler(fileHandler)
        log.addHandler(timeHandler)
        return log
    

    调用

    #调用logging
    from public import get_excel,obtain_token,mylog
    logger = mylog.mylog(log_path)
    try:
        logger.info("开始执行接口测试")
        ......
        logger.info("结束")
    except:
        logger.info("接口测试发生错误")
        logger.exception(sys.exc_info())  #打印控制台报错信息
    

    相关文章

      网友评论

        本文标题:Python之logging模块

        本文链接:https://www.haomeiwen.com/subject/wzvmnqtx.html