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为Nonelogger = None
# 创建类方法@classmethoddef getLogger(cls):# 如果logger为None代码向下走,如果不是None则不执行代码,保证使用的是同一个loggerif 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.loggerif __name__ == "__main__":logger = GetLogger().getLogger()logger.info("info日志")

 

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

软件测试面试文档

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

在这里插入图片描述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/721894.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kubernetes 外部 HTTP 请求到达 Pod 容器的全过程

文章目录 1、问题一2、HTTP 请求流转过程概述图3、详细过程分析4、容器技术底座5、问题二6、详细过程分析(补充) 1、问题一 当外部发送一个HTTP/HTTPS 请求到Kubernetes 集群时&#xff0c;它是如何达到 Pod 中的 container 的呢&#xff1f; 2、HTTP 请求流转过程概述图 3、…

【论文阅读】(DALLE-3)Improving Image Generation with Better Captions

&#xff08;DALLE-3&#xff09;Improving Image Generation with Better Captions 文章目录 &#xff08;DALLE-3&#xff09;Improving Image Generation with Better Captions简介Method实验 引用&#xff1a; Betker J, Goh G, Jing L, et al. Improving image generation…

【数据存储】大端存储||小端存储(超详细解析,小白一看就懂!!!)

目录 一、前言 二、什么是低地址、高地址 &#xff1f; 三、什么是数据的高位和低位 &#xff1f; 四、什么是大小端存储&#xff1f; &#x1f349; 小端存储详解 &#x1f352; 大端存储详解 五、为什么会有大小端存储&#xff1f; &#x1f34d;大端存储的优点 &#…

React | 低代码平台开发实践

⭐简单说两句⭐ 作者&#xff1a;后端小知识&#xff0c;CSDN后端领域新星创作者|阿里云专家博主 CSDN个人主页&#xff1a;后端小知识 &#x1f50e;GZH&#xff1a;后端小知识 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; 前言 随着数字…

AI绘画丨超酷海盗女孩生成攻略

海盗在许多艺术作品中颠覆了历史上的负面模样&#xff0c;以正面的形象登场&#xff0c;这让许多较为年轻的人们对“海盗”这一职位充满憧憬。那么一个兼具野性与美丽的女性海盗该怎么生成呢&#xff1f;小编就带来了本次的生成关键词&#xff01; 关键词&#xff1a;pirate g…

文件操作与IO(3) 文件内容的读写——数据流

目录 一、流的概念 二、字节流代码演示 1、InputStream read方法 第一个没有参数的版本&#xff1a; 第二个带有byte数组的版本&#xff1a; 第三个版本 搭配Scanner的使用 2、OutputStream write方法 第一个版本&#xff1a; 第二个写入整个数组版本&#xff1a; …

信号灯——进程通信——day16

今天主要讲一下信号灯&#xff0c;也是有名信号量&#xff0c;一共分为四个步骤&#xff1a;创建、销毁、申请以及释放 首先是创建&#xff1a; semget int semget(key_t key, int nsems, int semflg); 功能:创建一组信号量 参数:key:IPC对象名nsems:信号量的个数semflg:IPC_…

软件测试 - 测试用例基本理论

1. 概念 为了特定的目的(该目的是检验代码是否满足用户需求)而设计的文档&#xff0c;文档包含测试输入、执行条件、预期结果等。文档的形式一般是excel表格。 比如说我们买了一台电脑&#xff0c;新买的笔记本检查完外观之后第一步需要查看电脑是否能够正常开机&#xff0c;…

爬虫案例二

想拿到电影天堂 其中一个下载地址如何实现呢 第一步电影天堂_免费在线观看_迅雷电影下载_电影天堂网 (dytt28.com)电影天堂_电影下载_高清首发 (dytt89.com)电影天堂_免费在线观看_迅雷电影下载_电影天堂网 (dytt28.com) 第一步 我直接打开 requests.exceptions.SSLError: H…

Kubernetes Service

一、Service&#xff1a;Kubernetes 中的服务返现与负载均衡 1、为什么需要服务发现 Pod 生命周期短暂&#xff0c;IP 地址随时变化。 Deployment 等的 Pod 组需要统一访问入口和做负载均衡。 应用间在不同环境部署时保持同样的部署拓扑和访问方式。 2、应用服务如何暴露到…

免费!宝藏网站合集,每一个都不容错过

在科技日新月异的时代&#xff0c;PPT已经成为各行各业必不可少的展示工具。为了帮助大家提升PPT制作技巧&#xff0c;本文将为您介绍几款堪称神秘的PPT制作利器。它们分别是PPT宝库、PPT超级市场、魔法幻灯片以及优品PPT。 优品PPT 简介 优品PPT是一个专注于提供高质量PPT模…

JSP实现数据传递与保存

1.HTML页面转换JSP页面 直接再HTML页面最顶端添加page指令&#xff0c;修改文件后缀名&#xff1b;反之&#xff1b; 2.JSP内置对象 对象 描述 request 每当客户端请求JSP页面时&#xff0c;JSP引擎会制造一个新的request对象来代表这个请求。 response 当服务器创建req…

Linux-信号2

文章目录 前言一、信号是如何保存的&#xff1f;int sigemptyset(sigset_t *set);int sigfillset(sigset_t *set);int sigaddset (sigset_t *set, int signo);int sigdelset(sigset_t *set, int signo);int sigismember&#xff08;const sigset_t *set, int signo);int sigpen…

VS统计代码行数

1.使用查找和替换方式 按CTRLSHIFTF (Find in files)&#xff0c;勾上支持正则表达式&#xff0c; 然后输入搜索内容&#xff1a;^:b*[^:b#/].*$ 如图所示&#xff1a; 2.查看查询结果 需要注意&#xff1a;#开头和/开头或者空行都不计入代码量。

【研发日记】Matlab/Simulink技能解锁(二)——在Function编辑窗口Debug

目录 前言 行断点 条件断点 前言 见《【研发日记】Matlab/Simulink技能解锁(一)——在Simulink编辑窗口Debug》 行断点 当Matlab Function出现异常时&#xff0c;如果能确定大致的代码段&#xff0c;就可以在相应的行上设置一个断点&#xff08;Breakpoint&#xff09;&…

vs2022 qt 关于lnk2001和2019同时报错的问题

需要像qt中添加模块&#xff0c;这里&#xff0c;缺少qtopenglwidgets模块

大数据分析课----实时更新

1&#xff1a;Anaconda3 windows 安装 &#xff1a; 去官网下载&#xff1b; 然后安装好直接点next 点 i agree&#xff1b; 自己的电脑选第一个&#xff1b;学校的话选All Users &#xff1b; 选择自己存放的目录&#xff1b; 选前三个&#xff1b; 安装即可&#xff1b; 一直…

解决Maven项目中的依赖冲突

1. 排查依赖冲突 在IDEA中下载插件 Maven Helper用于排查依赖版本冲突。 打开项目的pom.xml文件&#xff0c;点击下方的【Dependency Analyzer】按钮切换到依赖解析页面。 2. 解决版本依赖 在依赖解析页面进行依赖冲突排查操作&#xff1a; 点击 【Exclude】 后会在爆红处所对…

为PDF创建目录(侧边栏目录)

通过可以新建书签的pdf阅读器。 知云翻译&#xff1a;可以新建书签和子书签。 Adobe Acrobat&#xff1a;只能新建书签&#xff0c;不能建立子书签。

《操作系统原理》算法总结

一、进程调度算法 先来先服务调度算法&#xff08;FCFS&#xff09; 每次调度是从就绪队列中&#xff0c;选择一个最先进入就绪队列的进程&#xff0c;把处理器分配给该进程&#xff0c;使之得到执行。该进程一旦占有了处理器&#xff0c;它就一直运行下去&#xff0c;直到该…