背景
????????说到日志,无论是开发写代码还是写UI自动化测试,都离不开日志的记录,它能给我们在定位问题、缺陷时带来很大的方便。通常测试人员使用最多的方法就是用print来打印出日志和报错信息,但是对于一些项目比较大的项目,使用print就不是那么方便了。因为print打印出来的日志没有时间,不知道日志记录的位置,针对这种情况,我们可以使用python自带的logging模块,可以很好地解决上面问题。
环境准备
编译工具:pycharm 编程语言:python
日志级别
????????在python提供的log模块,一共把日志级别分为5级,分别为:
1、Debug级是最详细的日志信息,典型的应用场场景是问题诊断。
2、INFO 信息详细程度仅次于DEBUG,通常只记录关键节点信息,用于确认一切都是按照我们预期的那样进行工作。
3、WARNING ?当某些不期望的事情发生时记录的信息(如,磁盘可用空间较低),但是此时应用程序还是正常运行的
4、ERROR 由于一个更严重的问题导致某些功能不能正常运行时记录的信息
5、CRITICAL 当发生严重错误,导致应用程序不能继续运行时记录的信息
'''log的使用'''
import logging
logging.basicConfig(level=logging.INFO) ?#设置logging的日志级别
logging.info('infor级调试信息')
logging.debug('debug级调试信息')
logging.warning('warning级调试信息')
logging.error('error级调试信息')
logging.critical('critical级调试信息')
????????其中log日志级别程度逐次增高,默认情况下日志的级别是WARNING,低于WARNING级别的日志都不会被输出。
log日志级别设置
????????上面说过log日志默认输出WARNING级别的,但是我想要输出INFO级的话就需要设置日志级别输出,在开始记录日志前可以使用logging.basicConfig方法来设定日志级别。
logging.basicConfig(level=logging.INFO) #设置logging的日志级别为INFO
logging.info('输出info级调试信息')
logging.debug('输出debug级调试信息')
logging.warning('输出warning级调试信息')
logging.error('输出error级调试信息')
????????通过设置logging日志级别为INFO后,输出结果如下:
Logging.basicConfig函数说明
????????如果我们想要指定log日志输出的格式、保存路径的话,可以用logging.basicConfig函数来实现,其主要参数使用如下: 1、filename:指定日志说出目标文件的文件名,指定该设置项后日志信息就不会被输出到控制台了。 2、filemode:指定日志文件的打开模式,默认为‘a',需要注意的是,该选项要在filename指定时才有效 3、format:指定日志格式字符串,既指定日志输出时所包含的字段信息以及他们的顺序,logging模块定义的格式字段下面会列出 4、datefmt:指定日期/时间格式,需要注意的是,该选项要在format中包含时间字段%(asctime)s时才有效 5、level:指定日志器的日志级别 6、stream:指定日志输出目标stream,如sys.stdout,sys.stderr以及网络stream。需要说明的是,stream和filename不能同时提供,否则会引发ValueError异常 7、style:Python3.2中新添加的配置项,指定format格式字符串的风格,可取值为“%,{,$”,,默认是'%'。 8、handlers:Python3.3中新添加的配置项,该选项如果被指定,它应该是一个创建了多个handler的可迭代对象,这些handler将会被添加到root logger。需要说明的是:filename,stream和handlers这三个配置项只能有一个存在,不能同时出现2个或3个,否则会引发ValueError异常。
?
mport logging
my_format = '%(asctime)s-%(filename)s-%(module)s-%(lineno)d' #log日志格式设置,打印当前时间,当前执行的程序名称,当前行号、模块。
logging.basicConfig(
filename = 'my.log', #日志文件名称
level = logging.INFO, #设置日志级别为INFO级
format=my_format
)
logging.info('infor')
logging.debug('debug')
logging.warning('warning')
logging.error('error')
logging.critical('critical')
运行代码后打开my,log可以看到记录的log信息。
Logging模块的格式化字符串
????????对个这个格式,我们可以一起使用,每个格式之间需要使用”-”进行连接,如: my_format = '%(asctime)s-%(filename)s-%(module)s-%(lineno)d'
使用格式 | 描述信息 | 字段/属性名称 | %(asctime)s | 打印日志的时间 | asctime | %(filename)s | 打印当前执行程序名称 | fimename | %(levelname)s | 打印日志级别名称 | levelname | %(message)s | 打印日志信息 | message | %(levelno)s | 打印日志级别的数值 | levelno | %(pathname)s | 打印当前执行程序的路径 | pathname | %(funcName)s | 打印日志的当前函数 | funcName | %(lineno)d | 打印日志的当前行号 | lineno | %(thread)d | 打印线程id | thread | %(threadName)s | 打印线程名称 | threadName |
Log处理器
????????什么是log处理器,我的理解就是把记录生成的log日志进行处理的过程,它就像一个搬运工一样,不生产、制造产品,只负责把物品搬运到指定的位置。Python自己内置了很多的处理器,常见的有: 1、StreamHandler标准流处理器,将消息发送到标准输出流、错误流 2、FileHandler文件处理器,将消息发送到文件 3、RotatingFileHandler文件处理器,文件达到指定大小后,启用新文件存储日志。 4、TimedRotatingFileHandler文件处理器,日志以特定的时间间隔轮换日志文件。
例如:
import logging
from logging import StreamHandler
from logging import FileHandler
logger = logging.getLogger(__name__)
# 设置为DEBUG级别
logger.setLevel(logging.DEBUG)
# 标准流处理器,设置的级别为WARAING
stream_handler = StreamHandler()
stream_handler.setLevel(logging.WARNING)
logger.addHandler(stream_handler)
# 文件处理器,设置的级别为INFO
file_handler = FileHandler(filename="test.log")
file_handler.setLevel(logging.INFO)
logger.addHandler(file_handler)
logger.debug("this is debug")
logger.info("this is info")
logger.error("this is error")
logger.warning("this is warning")
?总结
????????以上就是logging日志的基本使用方法,相信掌握以上方法可以帮助我们更好地理解日志的输出、打印和选择,在今后的UI自动化中不局限于仅仅使用print打印,还可以用logging模块来系统地记录报错信息,定位问题更加方便!
|