当前位置: 首页 > news >正文

Python快速上手系列--日志模块--详解篇

前言

本篇主要说说日志模块,在写自动化测试框架的时候我们就需要用到这个模块了,方便我们快速的定位错误,了解软件的运行情况,更加顺畅的调试程序。

为什么要用到日志模块,直接print不就好了!那得写多少print出来,并且格式也不怎么美观。至于其他的作用,当然也有其他的办法可以替代,为了便捷,我们直接用logging模块一起做了。

1、logging可以设置不同的日志等级

2、可以指定如何输出及输出的位置应用场景:当我需要看大量的地方或者在一个文件中查看的时候,这时候print就不大方便了,所以 Python引入了logging模块来记录我想要的信息。

3、logging相对print来说更好控制输出在哪个地方,怎么输出及控制消息级别来过滤掉那些 不需要的信息 日志模块又分了等级:CRITICAL > ERROR > WARNING > INFO > DEBUG

参数

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: 打印日志信息

logging的四大组件

日志的四大组件:日志器、处理器、过滤器、格式器

# 创建日志器
log = logging.getLogger()
# # # 1、日志器设置输出日志级别,debug包括debug级别以上的都输出
log.setLevel(level=logging.ERROR)
# # 创建处理器,相当于实例化h = logging.StreamHandler()
# # 2、处理器设置输出级别》》》输出到控制台
h.setLevel(level=logging.DEBUG)
# # 文件中保存日志,可以指定D、C盘的路径
h = logging.FileHandler('托马.log',mode='a',encoding='utf-8')
# # 日志器添加处理器
log.addHandler(h)
log.error("error")
log.warning("warning")
log.debug("debug")
log.info("info")

上面事日志器,我们来看看格式器:与日志器类似的写法:

这里我将格式器日志器放在一块了。直接复制运行就能看到效果。还是比较容易的。

logging封装

""""

日志输出步骤

1、创建日志器

设置日志级别

2、创建处理器

控制台、文件

设置日志级别

3、创建格式器

想要打印的格式

4、日志器添加处理器

5、处理器添加格式器

6、日志器日志的输出

"""

class Log_object():

def __init__(self):# 构造函数初始化日志器

self.log = logging.getLogger()

self.log.setLevel(level=logging.DEBUG)

def set_Formatter(self):#格式器

self.f1= logging.Formatter(fmt='[%(asctime)s %(levelname)s %(filename)s:>>>%(message)s]')

self.f2 = logging.Formatter(fmt='[%(asctime)s %(levelname)s 行数:%(lineno)d:>>>%(message)s]')

return self.f1,self.f2

def add_StreamHandler(self):#控制台处理器

# 创建并初始化处理器

self.h = logging.StreamHandler()

# 设置处理器级别

self.h.setLevel(level=logging.WARNING)

#处理器添加格式器

self.h.setFormatter(self.set_Formatter()[0])

#日志器添加处理器

self.log.addHandler(self.h)

def add_FileHandler(self,file_name):#文件处理器

self.h = logging.FileHandler(file_name,mode='a',encoding='utf-8')

self.h.setLevel(level=logging.WARNING)

self.h.setFormatter(self.set_Formatter()[1])

self.log.addHandler(self.h)

# 同时调用以上两个方法

def get_log(self,file_name):

self.add_StreamHandler()

self.add_FileHandler(file_name)

return self.log

lg = Log_object()

# res = lg.get_log('封装日志.log')

# res.error("error")

# res.warning("warning")

# res.debug("debug")

# res.info("info")

除上述的写法之外呢,还可以用装饰器来写日志,前面我们学过装饰器,可以自己结合起来,打开脑洞来试试吧。

相关文章:

Python快速上手系列--日志模块--详解篇

前言本篇主要说说日志模块,在写自动化测试框架的时候我们就需要用到这个模块了,方便我们快速的定位错误,了解软件的运行情况,更加顺畅的调试程序。为什么要用到日志模块,直接print不就好了!那得写多少print…...

【THREE.JS学习(1)】绘制一个可以旋转、放缩的立方体

学习新技能,做一下笔记。在使用ThreeJS的时候,首先创建一个场景const scene new THREE.Scene();接着,创建一个相机其中,THREE.PerspectiveCamera()四个参数分别为:1.fov 相机视锥体竖直方向视野…...

数仓实战 - 滴滴出行

项目大致流程: 1、项目业务背景 1.1 目的 本案例将某出行打车的日志数据来进行数据分析,例如:我们需要统计某一天订单量是多少、预约订单与非预约订单的占比是多少、不同时段订单占比等 数据海量 – 大数据 hive比MySQL慢很多 1.2 项目架…...

python虚拟环境与环境变量

一、环境变量 1.环境变量 在命令行下,使用可执行文件,需要来到可执行文件的路径下执行 如果在任意路径下执行可执行文件,能够有响应,就需要在环境变量配置 2.设置环境变量 用户变量:当前用户登录到系统,…...

BeautifulSoup文档4-详细方法 | 用什么方法对文档树进行搜索?

4-详细方法 | 用什么方法对文档树进行搜索?1 过滤器1.1 字符串1.2 正则表达式1.3 列表1.4 True1.5 可以自定义方法2 find_all()2.1 参数原型2.2 name参数2.3 keyword 参数2.4 string 参数2.5 limit 参数2.6 recursive 参数3 find()4 find_parents()和find_parent()5…...

初识Tkinter界面设计

目录 前言 一、初识Tkinter 二、Label控件 三、Button控件 四、Entry控件 前言 本文简单介绍如何使用Python创建一个界面。 一、初识Tk...

软件测试面试题中的sql题目你会做吗?

目录 1.学生表 2.一道SQL语句面试题,关于group by表内容: 3.表中有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列 4. 5.姓名:name 课程:subject 分数&…...

VS实用调试技巧

一.什么是BUG🐛Bug一词的原意是虫子,而在电脑系统或程序中隐藏着的一些未被发现的缺陷或问题,人们也叫它"bug"。这是为什么呢?这就要追溯到一个程序员与飞蛾的故事了。Bug的创始人格蕾丝赫柏(Grace Murray H…...

通俗易懂理解三次握手、四次挥手(TCP)

文章目录1、通俗语言理解1.1 三次握手1.2 四次挥手2、进一步理解三次握手和四次挥手2.1 三次握手2.2 四次挥手1、通俗语言理解 1.1 三次握手 C:客户端 S:服务器端 第一次握手: C:在吗?我要和你建立连接。 第二次握手&#xff…...

1.1 什么是并发

1.1 什么是并发 并发:指两个或更多独立的活动同时发生。并发在生活中随处可见。我们可以一边走路一边说话,也可以两只手同时做不同的动作。 1.1.1 计算机系统中的并发 当我们提到计算机术语的“并发”,指的是在单个系统里同时执行多个独立…...

万字讲解你写的代码是如何跑起来的?

今天我们来思考一个简单的问题&#xff0c;一个程序是如何在 Linux 上执行起来的&#xff1f; 我们就拿全宇宙最简单的 Hello World 程序来举例。 #include <stdio.h> int main() {printf("Hello, World!\n");return 0; } 我们在写完代码后&#xff0c;进行…...

034.Solidity入门——21不可变量

Solidity 中的不可变量是在编译时就被确定的常量&#xff0c;也称为常量变量&#xff08;constant variable&#xff09;或只读变量&#xff08;read-only variable&#xff09;。这些变量在定义时必须立即初始化&#xff0c;并且在整个合约中都无法被修改&#xff0c;可以在函…...

Vulnhub 渗透练习(四)—— Acid

环境搭建 环境下载 kail 和 靶机网络适配调成 Nat 模式&#xff0c;实在不行直接把网络适配还原默认值&#xff0c;再重试。 信息收集 主机扫描 没扫到&#xff0c;那可能端口很靠后&#xff0c;把所有端口全扫一遍。 发现 33447 端口。 扫描目录&#xff0c;没什么有用的…...

C++ 在线工具

online编译器https://godbolt.org/Online C Compiler - online editor (onlinegdb.com) https://www.onlinegdb.com/online_c_compilerC Shell (cpp.sh) https://cpp.sh/在线文档Open Standards (open-std.org)Index of /afs/cs.cmu.edu/academic/class/15211/spring.96/wwwC P…...

使用MMDetection进行目标检测、实例和全景分割

MMDetection 是一个基于 PyTorch 的目标检测开源工具箱&#xff0c;它是 OpenMMLab 项目的一部分。包含以下主要特性&#xff1a; 支持三个任务 目标检测&#xff08;Object Detection&#xff09;是指分类并定位图片中物体的任务实例分割&#xff08;Instance Segmentation&a…...

使用ThreadLocal实现当前登录信息的存取

有志者&#xff0c;事竟成 文章持续更新&#xff0c;可以关注【小奇JAVA面试】第一时间阅读&#xff0c;回复【资料】获取福利&#xff0c;回复【项目】获取项目源码&#xff0c;回复【简历模板】获取简历模板&#xff0c;回复【学习路线图】获取学习路线图。 文章目录一、使用…...

高通平台开发系列讲解(Android篇)AudioTrack音频流数据传输

文章目录 一、音频流数据传输通道创建1.1、流程描述1.2、流程图解二、音频数据传输2.1、流程描述2.2、流程图解沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇章主要图解AudioTrack音频流数据传输 。 一、音频流数据传输通道创建 1.1、流程描述 AudioTrack在set函…...

BUUCTF-firmware1

题目下载&#xff1a;下载 新题型&#xff0c;记录一下 题目给出了flag形式&#xff0c;md5{网址&#xff1a;端口}&#xff0c;下载发现是一个.bin文件 二进制文件&#xff0c;其用途依系统或应用而定。一种文件格式binary的缩写。一个后缀名为".bin"的文件&#x…...

【C++之容器篇】二叉搜索树的理论与使用

目录前言一、二叉搜索树的概念二、二叉搜素树的模拟实现&#xff08;增删查非递归实现&#xff09;1. 二叉搜素树的结点2. 二叉搜索树的实现&#xff08;1&#xff09;. 二叉搜索树的基本结构&#xff08;2&#xff09;构造函数&#xff08;3&#xff09;查找函数&#xff08;4…...

爬虫神级解析工具之XPath:用法详解及实战

一、XPATH是什么 Xpath最初被设计用来搜寻XML文档,但它同样适用于HTML文档的搜索。通过简洁明了的路径选择表达式,它提供了强大的选择功能;同时得益于其内置的丰富的函数,它可以匹配和处理字符串、数值、时间等数据格式,几乎所有节点我们都可以通过Xpath来定位。 在Pyth…...

从U盘到移动硬盘:深入拆解USB存储设备里的BOT和UASP协议栈

从U盘到移动硬盘&#xff1a;深入拆解USB存储设备里的BOT和UASP协议栈 当你将一块移动固态硬盘插入电脑的USB 3.2接口&#xff0c;期待每秒上千兆字节的传输速度时&#xff0c;是否想过这背后隐藏着怎样的协议魔法&#xff1f;在USB存储设备的世界里&#xff0c;BOT&#xff08…...

科技成果转化平台建设成本高如何解决?

观点作者&#xff1a;科易网-国家科技成果转化&#xff08;厦门&#xff09;示范基地现状概述&#xff08;成效与短板&#xff09; 近年来&#xff0c;我国科技成果转化平台建设取得显著进展&#xff0c;各地政府部门、高校、科研院所积极探索&#xff0c;累计建成各类技术转移…...

Shell脚本守护工具sh-guard:提升Linux自动化脚本可靠性

1. 项目概述&#xff1a;一个被低估的Shell脚本守护神 如果你经常和Linux服务器打交道&#xff0c;或者需要编写一些自动化运维、部署、监控的Shell脚本&#xff0c;那你一定遇到过这样的场景&#xff1a;脚本在后台运行&#xff0c;突然因为网络波动、资源不足、依赖服务异常而…...

别再死记硬背公式了!用C++ STL的next_permutation玩转排列组合(附LeetCode刷题实战)

用C STL的next_permutation玩转排列组合&#xff1a;LeetCode实战指南 在算法面试和编程竞赛中&#xff0c;排列组合问题几乎无处不在。从全排列到子集生成&#xff0c;这类问题看似基础&#xff0c;却能让不少开发者陷入递归的泥潭。但你知道吗&#xff1f;C标准库中早已藏着一…...

Data Storage and Computation

Data Storage and Computation 数据存储与计算假设一张表有 3 个字段&#xff1a;id BIGINT&#xff08;8 字节 / 条&#xff09; name VARCHAR(20)&#xff08;实际平均 10 字节 / 条&#xff09; age TINYINT&#xff08;1 字节 / 条&#xff09;单行实际数据占用&#xff1…...

AArch64内存屏障与缓存一致性机制详解

1. AArch64内存屏障机制深度解析在AArch64架构中&#xff0c;内存屏障&#xff08;Memory Barrier&#xff09;是确保多核系统中内存访问顺序性的关键机制。现代处理器普遍采用乱序执行和缓存技术来提升性能&#xff0c;但这会导致内存操作的可见性顺序与程序顺序不一致。内存屏…...

OpenSpeedy:终极免费游戏变速工具完整使用指南

OpenSpeedy&#xff1a;终极免费游戏变速工具完整使用指南 【免费下载链接】OpenSpeedy &#x1f3ae; An open-source game speed modifier. 项目地址: https://gitcode.com/gh_mirrors/op/OpenSpeedy OpenSpeedy是一款完全免费且开源的Windows游戏加速工具&#xff0c…...

如何免费获取B站8K高清视频:哔哩下载姬完整使用教程

如何免费获取B站8K高清视频&#xff1a;哔哩下载姬完整使用教程 【免费下载链接】downkyi 哔哩下载姬downkyi&#xff0c;哔哩哔哩网站视频下载工具&#xff0c;支持批量下载&#xff0c;支持8K、HDR、杜比视界&#xff0c;提供工具箱&#xff08;音视频提取、去水印等&#xf…...

国产替代之NVMFS5C673NWFT1G 与 VBQA1615 参数对比报告

N沟道功率MOSFET参数对比分析报告一、产品概述NVMFS5C673NWFT1G&#xff1a;安森美&#xff08;onsemi&#xff09;N沟道功率MOSFET&#xff0c;耐压60V&#xff0c;极低导通电阻&#xff08;10.7mΩ&#xff09;&#xff0c;采用先进沟槽工艺&#xff0c;具有低栅极电荷和电容…...

k8s——RBAC认证中心

一、整体流程&#xff1a;认证 → 授权 → 准入控制在 Kubernetes 中&#xff0c;所有操作都要通过 API Server。当你&#xff08;或某个程序&#xff09;想对集群做任何事&#xff08;比如创建一个 Pod&#xff09;&#xff0c;必须经过三步检查&#xff1a;认证&#xff1a;你…...