- 记录用户操作的审计日志,甚至有的时候就是监管部门的要求。
- 快速定位问题的根源
- 追踪程序执行的过程。
- 追踪数据的变化
- 数据统计和性能分析
- 采集运行环境数据
一般在程序上线之后,一旦发生异常,第一件事就是要弄清楚当时发生了什么。用户当时做了什么操作,环境有无影响,数据有什么变化,是不是反复发生等,然后再进一步的确定大致是哪个方面的问题。确定是程序的问题之后再交由开发人员去重现、研究、提出解决方案。这时,日志就给我们提供了第一手的资料。
二、日志级别
- DEBUG Level
指出细粒度信息事件,主要用来调试应用程序。
2.INFO level
表明粗粒度级别,上强调应用程序的运行过程,比如进入某个业务分支。
-
WARN level
表明出现潜在错误。 -
ERROR leve
指出虽然发生错误事件,但不影响系统的继续运行。
5.FATAL level
指出每个严重的错误事件将会导致应用程序的退出。
Log4j建议只使用四个级别,优先级从高到低分别是 ERROR、WARN、INFO、DEBUG。 等于或高于日志记录器当前配置级别的日志的将被打印出来。
优先级为:DEBUG<INFO<WARNING<ERROR<CRITICAL
日志的默认级别是warning级别及以上,debug和info都不会再控制台输出
三、几个重要的概念
Logger 记录器:提供日志的接口,供应用代码使用
Handle 处理器:将(记录器产生的)日志记录发送到哪里,即输出到哪里
Filter 过滤器:提供了更好的粒度控制,它可以决定输出哪些日志记录,提供一种优雅的方式决定一个日志记录是否发送到handle
Formatter 格式化器:指定日志记录输出的具体格式
四、Logger 记录器
1、概述
是一个树形层级结构,在使用接口debug、info、warning、error、critical之前必须创建Logger实例,即创建一个记录器,如果没有显式上的进行创建,则默认创建一个root logger,并应用默认的日志级别(warn),处理器Handle(StreamHandle,即将日志信息打印输出在标准输出上),和格式化器Formatter(默认的格式即为第一个简单实用程序中输出的格式)。
创建的方法:logger = logging.getLogger(logger_name)
Logger对象从不直接实例化,而是通过模块级别的功能
Logging.getLogger(name)创建logger实例,调用logging.getLogger(name)功能时,如果传入的name参数值相同,则总是返回一个logger对象实例的应用。
2、创建Logger实例后,可以用以下方法进行日志级别设置,增加处理器Handle
logger.setLevel(logging.ERROR) = 设置日志级别为ERROR,即只有日志级别大于等于ERROR的日志才会输出(默认级别是warning)
logger.addHandle(handle_name) = 为Logger实例增加一个处理器
logger.removeHandle(handle_name) = 为Logger实例删除一个处理器
五、Handle 处理器
1、概述
handle 将日志信息发送到指定的位置(文件、窗口)
Handle处理器的类型:StreamHandle,FileHandle,NullHandle
2、StreamHandle
创建方法:sh = logging.StreamHandle(stream==None)
将日志输出发送到控制台
3、FileHandle
将日志记录发送到磁盘文件,它继承了StreamHandle的输出功能
创建方法:fh = logging.FileHandle(filename,mode=‘a’,encoding=None,delay=False)
4、NullHandle
不做任何格式化或输出,它本质上是一个开发人员使用的“无操作”处理程序
本质上是一个“什么都不做”的handle,由库开发者使用
六、Formatter 格式化器
1、概述
用于设置日志的输出格式
创建方法:formatter = logging.Formatter(fmt=None,datefmt=None),fmt和datefmt是用来设置日志格式和时间格式
默认的格式:%(asctime)s-%(levelname)s-%(message)s
默认的时间格式:%Y-%m-%d %H:%M:%S
2、使用Formatter对象设置日志信息最后的规则、结构和内容
七、日志在实际测试用例中的应用
封装类有便于外部文件对日志的调用,例子主要完成在控制台输出日志和日志输出到外部的.log文件中
封装日志类的步骤:
创建 logger
创建 handle
创建 formatter
配置 logger
上栗子:
1.在工程目录下创建类的外部log文件:test.log
2.封装Logger类:
日志综合案例的封装
import logging
class Logger():
def init(self, LoggerName, FileName, CmdLevel, FileLevel):
LoggerName:实例化对象的名字 FileName:外部文件名 CmdLevel:设置控制台中日志输出的级别 FileLevel:设置文件日志输出的级别
self.logger = logging.getLogger(LoggerName)
设置日志的级别
self.logger.setLevel(logging.DEBUG)
设置日志的输出格式
fmt = logging.Formatter(‘%(asctime)s-%(name)s-%(levelname)s-%(message)s’)
借助handle将日志输出到test.log文件中
fh = logging.FileHandler(FileName)
fh.setLevel(FileLevel)
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数软件测试工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年软件测试全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上软件测试开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注软件测试)
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
战项目、讲解视频,并且后续会持续更新**
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注软件测试)
[外链图片转存中…(img-aUugeBrq-1712984045381)]
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!