python接口自动化(三十九)- logger 日志 - 上(超详解)

news2024/10/6 20:27:35

简介

 Python的logging模块提供了通用的日志系统,可以方便第三方模块或者是应用使用。这个模块提供不同的日志级别,并可以采用不同的方式记录日志,比如文件,HTTP GET/POST,SMTP,Socket等,甚至可以自己实现具体的日志记录方式。

        logging模块与log4j的机制是一样的,只是具体的实现细节不同。模块提供logger,handler,filter,formatter。

  • logger
    提供日志接口,供应用代码使用。logger最长用的操作有两类:配置和发送日志消息。可以通过logging.getLogger(name)获取logger对象,如果不指定name则返回root对象,多次使用相同的name调用getLogger方法返回同一个logger对象。

  • handler
    将日志记录(log record)发送到合适的目的地(destination),比如文件,socket等。一个logger对象可以通过addHandler方法添加0到多个handler,每个handler又可以定义不同日志级别,以实现日志分级过滤显示。

  • filter
    提供一种优雅的方式决定一个日志记录是否发送到handler。

  • formatter
    指定日志记录输出的具体格式。formatter的构造方法需要两个参数:消息的格式字符串和日期字符串,这两个参数都是可选的。

  与log4j类似,logger,handler和日志消息的调用可以有具体的日志级别(Level),只有在日志消息的级别大于logger和handler的级别。

logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级、日志保存路径、日志文件回滚等;相比print,具备如下优点:

  1. 可以通过设置不同的日志等级,在release版本中只输出重要信息,而不必显示大量的调试信息;
  2. print将所有信息都输出到标准输出中,严重影响开发者从标准输出中查看其它数据;logging则可以由开发者决定将信息输出到什么地方,以及怎么输出

如果你想学习接口自动化测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的接口自动化测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:798478386    

【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)_哔哩哔哩_bilibili【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)共计200条视频,包括:1.【接口自动化】目前软件测试的市场行情以及测试人员能力标准。、2.【接口自动化】全面熟练Requests库以及底层方法调用逻辑、3.【接口自动化】接口自动化实战及正则和JsonPath提取器的应用等,UP主更多精彩视频,请关注UP账号。https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from=333.337&vd_source=488d25e59e6c5b111f7a1a1a16ecbe9a

logging模块使用

1 基本使用

配置logging基本的设置,然后在控制台输出日志:

运行时,控制台输出:

logging中可以选择很多消息级别,如debug、info、warning、error以及critical。通过赋予logger或者handler不同的级别,开发者就可以只输出错误信息到特定的记录文件,或者在调试时只记录调试信息。

例如,我们将logger的级别改为DEBUG,再观察一下输出结果:

控制台输出,可以发现,输出了debug的信息:

logging.basicConfig函数各参数:

filename:指定日志文件名;

filemode:和file函数意义相同,指定日志文件的打开模式,'w'或者'a';

format:指定输出的格式和内容,format可以输出很多有用的信息,

参数:作用

%(levelno)s:打印日志级别的数值
%(levelname)s:打印日志级别的名称
%(pathname)s:打印当前执行程序的路径,其实就是sys.argv[0]
%(filename)s:打印当前执行程序名
%(funcName)s:打印日志的当前函数
%(lineno)d:打印日志的当前行号
%(asctime)s:打印日志的时间
%(thread)d:打印线程ID
%(threadName)s:打印线程名称
%(process)d:打印进程ID
%(message)s:打印日志信息

datefmt:指定时间格式,同time.strftime();

level:设置日志级别,默认为logging.WARNNING;

stream:指定将日志的输出流,可以指定输出到sys.stderr,sys.stdout或者文件,默认输出到sys.stderr,当stream和filename同时指定时,stream被忽略;

2 将日志写入到文件

2.1 将日志写入到文件

设置logging,创建一个FileHandler,并对输出消息的格式进行设置,将其添加到logger,然后将日志写入到指定的文件中:

 

log.txt中日志数据为:

2.2 将日志同时输出到屏幕和日志文件

logger中添加StreamHandler,可以将日志输出到屏幕上:

可以在log.txt文件和控制台中看到:

可以发现,logging有一个日志处理的主对象,其他处理方式都是通过addHandler添加进去,logging中包含的handler主要有如下几种:

handler名称:位置;作用

StreamHandler:logging.StreamHandler;日志输出到流,可以是sys.stderr,sys.stdout或者文件
FileHandler:logging.FileHandler;日志输出到文件
BaseRotatingHandler:logging.handlers.BaseRotatingHandler;基本的日志回滚方式
RotatingHandler:logging.handlers.RotatingHandler;日志回滚方式,支持日志文件最大数量和日志文件回滚
TimeRotatingHandler:logging.handlers.TimeRotatingHandler;日志回滚方式,在一定时间区域内回滚日志文件
SocketHandler:logging.handlers.SocketHandler;远程输出日志到TCP/IP sockets
DatagramHandler:logging.handlers.DatagramHandler;远程输出日志到UDP sockets
SMTPHandler:logging.handlers.SMTPHandler;远程输出日志到邮件地址
SysLogHandler:logging.handlers.SysLogHandler;日志输出到syslog
NTEventLogHandler:logging.handlers.NTEventLogHandler;远程输出日志到Windows NT/2000/XP的事件日志
MemoryHandler:logging.handlers.MemoryHandler;日志输出到内存中的指定buffer
HTTPHandler:logging.handlers.HTTPHandler;通过"GET"或者"POST"远程输出到HTTP服务器

2.3 日志回滚

其实意思就是log会写在一个文件,这个文件定义成1K大小,日志太多写不下的话,它会自动备份成log.txt.1,log.txt.2 ......,然后再创建一个log.txt开始写log。使用RotatingFileHandler,可以实现日志回滚:

可以在工程目录中看到,备份的日志文件:

3 设置消息的等级

可以设置不同的日志等级,用于控制日志的输出:

日志等级:使用范围

FATAL:致命错误
CRITICAL:特别糟糕的事情,如内存耗尽、磁盘空间为空,一般很少使用
ERROR:发生错误时,如IO操作失败或者连接问题
WARNING:发生很重要的事件,但是并不是错误时,如用户登录密码错误
INFO:处理请求或者状态变化等日常事务
DEBUG:调试过程中使用DEBUG等级,如算法中每个循环的中间状态

4 捕获traceback

Python中的traceback模块被用于跟踪异常返回信息,可以在logging中记录下traceback。

代码如下:

控制台和日志文件log.txt中输出:

也可以使用logger.exception(msg,_args),它等价于logger.error(msg,exc_info = True,_args),所以你可以将

1 logger.error("Faild to open sklearn.txt from logger.error",exc_info = True)

替换为:

logger.exception("Failed to open sklearn.txt from logger.exception")

控制台和日志文件log.txt中输出:

 小结

    嘿嘿,又完成了一篇,下一篇给小伙伴们介绍一下,有关通过JSON或者YAML文件配置logging模块、多模块使用logging和自己封装一个日志类!!!

 

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

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

相关文章

给自己工作的箴言

箴言 目录概述需求: 设计思路实现思路分析工作箴言 性能参数测试: Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for change,challenge Survive.…

QT程序运行时依赖设置

本文主要解决Qt程序运行时容易遇到的两个问题: 找不到相关的Qt6Core.dll、Qt6Widgets.dll等库 这种情况下,把相关DLL所在目录添加到系统的环境变量 PATH 中,就可以了。 无法导入Qt相关的插件: qt.qpa.plugin: Could not find th…

高效的实时聊天利器:揭秘三个绝佳的网站聊天插件

实时聊天是连接用户与网站之间的纽带。传统的聊天方式已经逐渐不够满足用户的需求,如果不能快速跟用户交流以及快速解决用户问题,用户就容易跑掉,而网站聊天插件正好是实现实时聊天的必备工具。许多电子商务平台和网站都需要在聊天插件加持下…

[USACO06DEC] Milk Patterns G

目录 1.题目 2.思路 1.字典树(trie 树) 2.hash(正解) 1.有注释版 2. copy 版 3.后文 1.题目 Farmer John has noticed that the quality of milk given by his cows varies from day to day. On further investigation, he discovered that although he cant predict t…

【洛谷】P2004 领地选择(二维前缀和)

二维前缀和模板啦&#xff0c;家人们&#xff0c;一眼出 pos:&#xff08;up自己犯的错误&#xff0c;记录一下&#xff0c;也提醒大家&#xff09; x1<n-c1(1哦) y1<m-c1 x2x1c-1(-1哦) y2y1c-1 okk,上&#xff01; ACcode: #include<bits/stdc.h> using na…

C/C++封装:Windows/Linux下封装.lib/.so文件

C/C TCP/IP通信函数 这里提供了两个C/C中服务器与客户端之间通讯的两个程序&#xff0c;程序中封装了通信之间的函数方法&#xff0c;我们以这个程序为例进行封装。 文件目录结构按照C/C标准开源项目进行存放&#xff1a; ├─bin ├─doc ├─lib └─src├─xsocket│ │ …

influxdb 新增数据失败原因解析

前几天本地装了一个influxdb时序数据库&#xff0c;但是通过java新增数据一直失败&#xff0c;奇怪的是measurement和tag都能顺利添加&#xff0c;但是field一直没值。 最开始以为是用户权限&#xff0c;结果发现并不是。 最终原因&#xff1a;influxdb只能往默认的保留策略里…

中国人民大学与加拿大女王大学金融硕士——在职读研为自己而战,为未来而战

还记得去年大街小巷上广为流传的一首歌吗&#xff0c;“去吗 去啊 以最卑微的梦&#xff0c;战吗 战啊 以最孤高的梦&#xff0c;致那黑夜中的呜咽与怒吼&#xff0c;谁说站在光里的才算英雄”。这首歌表达了卑微的生活和梦想并不能击垮每个平凡的奋斗者。我们都有一个大梦想&a…

windbg 双机调试环境搭建(虚拟机)

windbg 双机调试环境搭建&#xff08;虚拟机&#xff09; WinDbg 下载安装下载安装 虚拟机下载安装下载安装虚拟机软件 VMware下载 Windows 镜像&#xff0c;新建虚拟机 WinDbg 建立连接使用演示参考资料 WinDbg 是一个调试器&#xff0c;可用于分析故障转储、调试实时用户模式…

提高驾驶安全性 | 基于ACM32 MCU的胎压监测仪方案

概述 作为车辆的基础部件&#xff0c;轮胎是影响行车安全不可忽视的因素之一。据统计&#xff0c;中国每年由胎压问题引起轮胎爆炸的交通事故约占 30%&#xff0c;其中 50%的高速交通事故是由车辆胎压异常引起。因此&#xff0c;准确实时地监测车辆在行驶过程中的轮胎压监测系…

HarmonyOS/OpenHarmony应用开发-程序包多HAP机制(下)

三、多HAP的开发调试与发布部署流程 &#xff08;一&#xff09;多HAP的开发调试与发布部署流程如下图所示。 图1 多HAP的开发调试与发布部署流程 &#xff08;二&#xff09;开发 开发者通过DevEco Studio工具按照业务的需要创建多个Module&#xff0c;在相应的Module中完成…

【Unity 实用插件篇】 | 使用Fungus插件制作一个对话系统,简单好学易上手

前言 【Unity 实用插件篇】| 使用Fungus插件制作一个对话系统&#xff0c;简单好学易上手一、Fungus介绍二、Fumgus导入三、Fungus功能使用3.1 基础对话效果实现3.2 搭建简单场景测试3.3 触碰 对话3.4 条件对话3.4 分支 对话3.5 改变对话UI视图 四、常用功能菜单介绍4.1 Flowch…

【前端】自制密码展示隐藏按钮

效果 一、前期准备 使用的图片是iconfront上拿的svg代码环境是Vue2 Element 二、创建组件 showPasswordAndclose <template><span class"show-password-container"><span v-if"chooseType CLOSE" click"changeType"><…

一文读懂Nacos原理及实践

文章目录 0. 前言0.nacos 介绍什么是 Nacos&#xff1f;Nacos 地图 1. 原理解析1.1 服务注册与发现流程一、服务注册流程二、服务发现流程三、注册中心高可用性机制 1.2. 原理解析一、服务注册与发现的概念二、服务注册与发现的流程2. 服务发现流程3. 服务负载均衡流程 三、服务…

javascript 将json数据导出excel

<el-button type"primary" plain v-on:click"jsonToExcel();">导出</el-button>jsonToExcel() {const data this.AlarmData;let head "城市,站点,时间,A相电流(A),B相电流(A),C相电流(A),SO2压力(MPa),CO压力(MPa),NOX压力(MPa),A相电压…

Activity引擎(初次学习与总结梳理全记录,包括易混淆知识点分析,常用报错解决方案等)

最近工作需要使用Acticity框架处理审批业务&#xff0c;简单了解后能虽能很快的上手&#xff0c;但是对于Activity的整体认识并不够&#xff0c;特此花费很多精力全面的学习并记录。包含对很多的概念的第一次理解过程&#xff1b;对知识点的混淆地方的梳理&#xff1b;对实践过…

mysql索引优化和锁

mysql索引优化和锁 IO操作与索引 IO操作上数据库性能的瓶颈之一&#xff0c;每次进行IO操作都需要消耗时间和资源。 核心:尽量减少 IO 操作的次数 读取次数少且读取量少是优化IO操作的核心目标。采用分块读取和局部性原理。 分块读取&#xff1a;将磁盘上的数据划分为若干…

黑马程序员编著过哪些教材?

黑马程序员是一家知名的IT培训机构&#xff0c;他们发布了许多教材和课程。 《Python入门教程》&#xff1a;介绍Python编程语言的基础知识和常用技巧。 《Java从入门到精通》&#xff1a;全面介绍Java编程语言的基础知识和高级特性。 《Web前端开发教程》&#xff1a;涵盖HT…

JDK压缩包安装,tomcat压缩包安装

1.解压JDK后进入我的电脑高级设置 2.新建系统变量&#xff08;变量名为JAVA_HOME&#xff0c;值为jdk文件夹的绝对地址&#xff09; 3.再次新建系统变量&#xff08;变量名为CLASSPATH&#xff0c;值为.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar&#xff09; 4.进入系…

教你如何快速准确地掌握AI最新技术

文章整理自&#xff1a;https://twitter.com/jbhuang0604/status/1426039195542360070?s21 人工智能领域如何follow最新技术&#xff1f;这应该是咱们这个行业非常关心的问题之一吧。 当你刚开始进行研究时&#xff0c;会发现每年都有成千上万的论文&#xff0c;如何在这些海…