前言
在自动化测试中,为了定位问题,调试框架代码,需要使用日志模块,今天我们重点讲解Python中的logging模块,在学习使用logging模块前,我们先要了解logging模块的四大天王:logger、handler、filter、formatter
一.logging模块的四大组件
logger:日志器,提供程序可使用的接口
handler:处理器,用于写入日志文件并输出到指定位置,如文件、控制台或网络等
filter:过滤器,用于输出符合指定条件的日志记录
formatter:格式器,决定日志记录的输出格式
二.如何使用logging模块---基本用法
1.创建logger对象,返回一个日志器
logger = logging.getlogger()
2.设置日志等级
logger.setLevel("DEBUG") #设置日志等级为debug
常见的日志级别有:DEBUG、INFO、WARNING、ERROR、CRITICAL,具体用法如下:
DEBUG:最低级别,追踪问题时使用
INFO:记录程序中一般事件的信息,或确认一切工作正常
WARNING:记录信息,用于警告
ERROR:用于记录程序报错信息
CRITICAL:最高级别,记录可能导致程序崩溃的错误
3.创建一个处理器对象
fh = logging.FileHandler(filename="bbb.log", mode='a', encoding="utf-8", delay=False) #创建一个文件处理器,日志输入文件,需要指定文件名称,写入的模式,编码格式等
4.创建一个格式器对象
fmt = logging.Formatter("[%(asctime)s]-[%(levelname)s]-[%(pathname)s]-[Line:%(lineno)d]-[LoggerInfo:%(message)s]") #一般格式器中要定义好日志产生时间,日志级别,产生日志的模块全路径,模块的哪一行,具体的日志信息等
5.为处理器添加格式
fh.setFormatter(fmt=fmt),将第4步中生成的格式器给第3步生成的处理器“吞吃”
6.为日志器添加处理方式
logger.addHandler(fh),将设置格式后的处理器对象给日志器“吞吃”,使日志器有处理日志的能力
7.调用日志器对象,生成日志
logger.debug("这是一个debug错误")
8.源码如下:
import logging #导入日志模块
logger = logging.getLogger() #创建日志器
logger.setLevel(logging.DEBUG) #设置日志的打印级别
fh = logging.FileHandler(filename="kkk.log",mode='a',encoding="utf-8") #创建日志处理器,用文件存放日志
sh = logging.StreamHandler()#创建日志处理器,在控制台打印
#创建格式器,指定日志的打印格式
fmt = logging.Formatter("[%(asctime)s]-[%(levelname)s]-[%(filename)s]-[Line:%(lineno)d]-[Msg:%(message)s]")
#给处理器设置格式
fh.setFormatter(fmt=fmt)
sh.setFormatter(fmt=fmt)
#给日志器添加处理器
logger.addHandler(fh)
logger.addHandler(sh)
#调用日志器
logger.debug("ajffasfdsas")
三.优化
上面的日志的基本用法,没有做封装,实际工作中使用不方便,我们接下来将其进行封装,方便需要使用时,进行调用,同时将具体包括将日志按日期分别存放到不同的文件,日志名称以时间命名;具体方法如下:
import logging,os,time
class Logging():
def make_log_dir(self,dirname='logs'): #创建存放日志的目录,并返回目录的路径
now_dir = os.path.dirname(__file__)
father_path = os.path.split(now_dir)[0]
path = os.path.join(father_path,dirname)
path = os.path.normpath(path)
if not os.path.exists(path):
os.mkdir(path)
return path
def get_log_filename(self):#创建日志文件的文件名格式,便于区分每天的日志
filename = "{}.log".format(time.strftime("%Y-%m-%d",time.localtime()))
filename = os.path.join(self.make_log_dir(),filename)
filename = os.path.normpath(filename)
return filename
def log(self,level='DEBUG'):#生成日志的主方法,传入对那些级别及以上的日志进行处理
logger = logging.getLogger()#创建日志器
levle = getattr(logging,level) #获取日志模块的的级别对象属性
logger.setLevel(level)#设置日志级别
if not logger.handlers: #作用,防止重新生成处理器
sh = logging.StreamHandler()#创建控制台日志处理器
fh = logging.FileHandler(filename=self.get_log_filename(),mode='a',encoding="utf-8")#创建日志文件处理器
#创建格式器
fmt = logging.Formatter("%(asctime)s-%(levelname)s-%(filename)s-Line:%(lineno)d-Message:%(message)s")
#给处理器添加格式
sh.setFormatter(fmt=fmt)
fh.setFormatter(fmt=fmt)
#给日志器添加处理器,过滤器一般在工作中用的比较少,如果需要精确过滤,可以使用过滤器
logger.addHandler(sh)
logger.addHandler(fh)
return logger #返回日志器
if __name__ == '__main__':
logger = Logging().log(level='DEBUG') #调用封装的日志方法,生成处理后的日志器
logger.debug("1111111111111111111111") #使用日志器生成日志
logger.info("222222222222222222222222")
logger.error("附件为IP飞机外婆家二分IP文件放")
logger.warning("3333333333333333333333333333")
logger.critical("44444444444444444444444444")
最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】