web自动化笔记十六:日志收集

日志的作用:
    -调试程序
    -了解系统程序运行情况,是否正常
    -系统程序运行故障分析与问题定位
    -用来做用户行为分析的数据统计

日志级别:是指日志信息的优先级、重要性或者严重程度
    DEBUG:调试级别,打印非常详细的日志信息,通常用于对代码的调试
    INFO:信息级别,打印一般的日志信息,突出强调程序的运行过程
    WARNING:警告级别,打印警告日志信息,表现会出现潜在错误的情形,一般不影响软件的正常使用
    ERROR:错误级别,打印错误异常信息,该级别错误可能会导致系统的一些功能无法正常使用
    CRITICAL:严重错误级别,一个严重的错误,这表明系统可能无法继续运行
一般只搜索DEBUG、INFO、WARNING、ERROR四个日志级别步骤
    1、导包
    2、调用相应级别方法,记录日志
代码详解:

import logging
 
# 设置日志级别
logging.basicConfig(level=logging.INFO)
# 打印日志信息
"""
设置日志级别后
 错误级别 ≥ INFO级别的才会被记录
"""
logging.debug("this is DEBUG...")
logging.info("this is INFO...")
logging.warning("this is WARNING...")
logging.error("this is ERROR...")
logging.critical("this is CRITICAL...")

编译结果:
 

INFO:root:this is INFO...
WARNING:root:this is WARNING...
ERROR:root:this is ERROR...
CRITICAL:root:this is CRITICAL...


设置日志级别
Logging.basicConfig(level=logging.DEBUG) 

提示:
    1、默认级别:logging.WARNING
    2、设置级别时调用的是logging文件夹下面的常量,而不是调用的小写方法
    3、设置级别后,日志信息只会记录大于或者等于此级别的记录

设置输出日志格式

fm = "%(asctime)s %(levelname)s [%(name)s] [%(filename)s (%(funcName)s:%(lineno)d] - %(message)s"

设置日志输出到指定文件中
(三个参数:等级:level , 格式化:format ,输出文件:filename)

Logging.basceConfig(level = logging.DEBUG,format = fm,filename = "../log/log01.log")

执行代码:

import logging
"""
设置日志级别后
 错误级别 ≥ INFO级别的才会被记录
"""
# 设置log输出格式
fm = "%(asctime)s %(levelname)s [%(name)s] [%(filename)s (%(funcName)s:%(lineno)d] - %(message)s"
# 设置日志级别,格式和输出位置
logging.basicConfig(level=logging.DEBUG,format = fm, filename= "./log/log01.log")
 
# 打印日志信息
logging.debug("this is DEBUG...")
logging.info("this is INFO...")
logging.warning("this is WARNING...")
logging.error("this is ERROR...")
logging.critical("this is CRITICAL...")

Log01.log中的日志内容:

2021-06-29 22:35:00,146 DEBUG [root] [logging_level.py (<module>:9] - this is DEBUG...
2021-06-29 22:35:00,147 INFO [root] [logging_level.py (<module>:10] - this is INFO...
2021-06-29 22:35:00,147 WARNING [root] [logging_level.py (<module>:11] - this is WARNING...
2021-06-29 22:35:00,147 ERROR [root] [logging_level.py (<module>:12] - this is ERROR...
2021-06-29 22:35:00,147 CRITICAL [root] [logging_level.py (<module>:13] - this is CRITICAL...


日志的高级用法
logging的四大组件
Logger :日志器  - 提供了程序使用日志的入口
Handle : 处理器 - 将logger创建的日志记录发送到合适的目的输出
Formatter : 格式器 - 决定日志记录的最终输出格式
Filter  : 提供了更细颗粒的控制工具来决定输出哪条日志记录,丢弃哪条日志记录

注意:logging模块是通过这些组件来完成日志处理的

各组件之间的关系:
1、日志器(logger)需要通过处理器(handler)将日志信息输出到目标位置,如:文件、sys.std.out、网络等; 
2、不同的处理器(handler)可以将日志输出到不同的位置;比如:控制台、文件、网络、邮件等。 
3、日志器(logger)可以设置多个处理器(handler)将同一条日志记录输出到不同的位置; 
4、每个处理器(handler)都可以设置自己的格式器(formatter)实现同一条日志以不同的格式输出到不同的地方。
5、每个处理器(handler)都可以设置自己的过滤器(filter)实现日志过滤,从而只保留感兴趣的日志; 简单点说就是:日志器(logger)是入口,真正干活儿的是处理器(handler),处理器(handler)还可以通过过 滤器(filter)和格式器(formatter)对要输出的日志内容做过滤和格式化等处理操作。 

日志器和处理器的使用
logger常用方法

如何创建logger对象
logger = logging.getLogger() - root
Logger = logging.getLogger(“mylogger”)

设置日志器将会处理的日志消息的最低严重级别
logger.setLevel()

为该logger对象添加一个handle对象
logger.addHandle()

如何创建Handle对象
    logging.StreamHandler : 将日志消息发送到输出到Stream,如std.out;std.eer或任何file-like对象
    logging.FileHandler:将日志消息发送到磁盘文件,默认情况下文件大小会无限增长
    logging.handlers.RotatingFileHandler:将日志消息发送到磁盘文件,并支持日志文件按大小切割(了解)
    logging.handlers.TimeRotatingHandler:将日志消息发送到磁盘文件,并支持日志文件按时间切割(掌握)
    logging.handlers.HTTPHandler:将日志消息以GET或POST的方式发送给一个HTTP服务器
    logging.handlers.SMTPHandler:将日志消息发送给一个指定的email地址

TimeRotatingHandler应用:
    导包:import logging.handlers
    实例化:th = logging.handlers.TimeRotatingHandler(filename = “文件路径”,
                                            when = “时间单位”,
                                            interval = “间隔时间”
                                             backupcount = 备份日志数量)
when:时间单位
interval:时间间隔
backupcount:保留备份日志数量

Handler常用方法
设置handler将会处理的日志消息的最低严重级别
handler.setLevel()    
设置格式器
handler.setFormatter()

日志器:
    操作:
        1、导包 import logging
        2、调用方法获取logger对象  如:logging.getlogger()
        3、设置级别:logger.setlevel = logging.INFO
        4、调用添加处理器方法 logger.addHandler(处理器)

处理器:
    获取:
        1、sh = logging.StreamHandler()
扩展:设置处理器级别为error级别,那么只有error级别信息才会写入文件

格式器:
    获取:
        fmt = “%(asctime)s %(levelname)s [%(name)s] [%(filename)s (%(funcName)s:%(lineno)d] - %(message)s”

        fm = logging.Formatter(fmt)
        控制台处理器.setFormatter(fm)
        文件处理器.setFormatter(fm)
    
    应用:
        logger.info(“日志信息”)
        logger.error(“日志信息”)

    日志封装
        定义获取日志类
            定义类属性 :logger = None
            @classmethod
            定义获取logger日志器的方法
                if cls.logger is None:#判断logger是否为空,如果为空就执行以下操作
                    获取日志器对象
                    设置日志器级别
                    获取控制台处理器
                    获取文件处理器
                    获取格式器
                    将格式器添加到处理器中
                    将处理器添加到日志器中
                return  类属性logger

            注意:
                1、以上条件无论是否成立,最后都会返回类属性logger;
                2、当第一次调用时,条件一定成立,将类属性logger设置不为空
                3、当第二次以上调用时,永远返回第一次设置的类属性对象

整体框架结构

单例模式操作日志,执行代码:

# 导包
import logging
import logging.handlers
# 创建日志类
class GetLogger():
    # 采用单例模式封装日志
    # 设置logger为None
    logger = None
# 创建类方法
    @classmethod
    def getLogger(cls):
        # 如果logger为None代码向下走,如果不是None则不执行代码,保证使用的是同一个logger
        if cls.logger is None:
            # 实例化logger,创建日志器
            cls.logger = logging.getLogger()
            # 设置日志器的最低等级
            cls.logger.setLevel(logging.INFO)
            # 创建控制台处理器
            ls = logging.StreamHandler()
            # 创建文件处理器
            lht = logging.handlers.TimedRotatingFileHandler(filename = "../log/log01.log",
                                                            when = "midnight",
                                                            interval = 1,
                                                            backupCount = 30)
            # 设置日志格式
            fmt = "%(asctime)s %(levelname)s [%(name)s] [%(filename)s (%(funcName)s:%(lineno)d] - %(message)s"
            # 获取日志格式器
            fm = logging.Formatter(fmt)
            # 将格式器添加到处理器中
            ls.setFormatter(fm)
            lht.setFormatter(fm)
            # 将处理器添加到日志器中
            cls.logger.addHandler(ls)
            cls.logger.addHandler(lht)
            # 返回日志器
            return cls.logger
 
if __name__ == "__main__":
    logger = GetLogger().getLogger()
    logger.info("info日志")

 

作为一个软件测试的过来人,我想尽自己最大的努力,帮助每一个伙伴都能顺利找到工作。所以我整理了下面这份资源,现在免费分享给大家,有需要的小伙伴可以关注【公众号:开心螺蛳粉】自提!

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。在这里插入图片描述

在这里插入图片描述

行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群:1150305204,里面有各种测试开发资料和技术可以一起交流哦。

  • 27
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值