测试工具

Python之logging模块

2019-04-30  本文已影响0人  冲锋丘丘人

前言

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

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

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

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

简单点说就是:日志器(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())  #打印控制台报错信息
上一篇下一篇

猜你喜欢

热点阅读