python进阶 -- 日志装饰器详解

日志

日志:记录程序运行的时候,出现的问题,或者说验证流程是否正常
在实际工作中,python的脚本命令一般是放在服务器执行的linux系统
日志其实就是记录程序运行时出现的问题、或者正常的打印,协助出现问题的时解决排查问题

python中内置的日志模块可以直接导入:

import logging

日志模块:会有日志的级别设置
级别是自己设置的,可以通过自定义的级别去确定什么东西该被记录,什么东西部该被记录

注意:设置日志级别的时候,单词全部需要大写

● DEBUG:等级最高,包含debug、info、warning、error的4种全部日志
● INFO:不包含debug日志
● WARING:不包含debug、info日志
● ERROR:不包含debug、info、warning日志
如果需要调整日志级别,level=logging.后面修改即可 

简单使用示例

import logginglogging.basicConfig(level=logging.INFO) #设置日志的打印级别def fun1():logging.debug("debug打印")logging.info("info打印")logging.warning("warning打印")logging.error("error打印")
fun1()

 通常,在写代码的时候,我们会将一段段的代码执行结果加上日志的输出,方便在本地查看代码是否执行成功

例如:现在有一段业务逻辑代码,在执行这段代码的同时加上日志的输出

import logginglogging.basicConfig(level=logging.INFO) #设置日志的打印级别def fun1():logging.debug("debug打印")logging.info("info打印")logging.warning("warning打印")logging.error("error打印")
#fun1()def fun2(func_name):func_name()  #调用传入的函数本体print("这是fun2函数的调用")fun2(fun1)

方式1:代码如上,在fun2函数调用时,括号内加上fun1这个函数名即可 

方式2:
fun2的输出内容中,fun2的原本内容与fun1的内容没有先后顺序,是并行的

所以也可以写成:最后调用时,函数1(函数3),如下:

import logginglogging.basicConfig(level=logging.INFO) #设置日志的打印级别def log_info(fun_name):logging.info("日志开始记录")fun_name()logging.info("函数执行结束")def fun3():print("fun3代码执行")log_info(fun3)

方式3:用一个变量接收,然后调用新的变量名

import logginglogging.basicConfig(level=logging.INFO) #设置日志的打印级别def log(fun_name):def wrapper():logging.info("日志开始记录")return wrapper  #不加括号,只是获取了wrapper这个函数的内存地址def fun4():print("fun5函数执行")method = log(fun_name=fun4)
method()  #但输出只完成了一半,并没有输出fun4的内容打印

装饰器

装饰器是Python中一种强大的编程工具,它可以用于修改、包装或扩展函数或方法的行为。装饰器本质上是一个函数,它接受一个函数作为输入,并返回一个新的函数或修改后的函数。装饰器通常用于在不修改原始函数代码的情况下,为函数添加额外的功能。

作用:

  1. 代码复用:装饰器可以用来封装通用的功能,例如日志记录、性能分析、权限检查等,以便在多个函数中重复使用。
  2. 代码修改:装饰器可以在不修改原始函数代码的情况下,对函数的行为进行修改,例如添加新的前置或后置处理逻辑。
  3. 元编程:装饰器本身是元编程的一种形式,它允许在运行时动态地修改函数或方法的行为。

装饰器的使用

接着上面的栗子,看看加上装饰器之后的代码: 

步骤:在fun5的头部加一个@函数名称,函数名称即装饰器的函数名称
在自动化的框架里面,有很多装饰器的应用,以及可以自定义装饰器去完成调用
import logginglogging.basicConfig(level=logging.INFO) #设置日志的打印级别def wrapper():logging.info("日志开始记录")fun()return wrapper  #不加括号,只是获取了wrapper这个函数的内存地址@log   #默认会把fun5的函数本体,传入到装饰器的参数里去
def fun5():print("fun5函数执行")fun5()

函数与装饰器一对多使用

一个函数是否可以使用多个装饰器?

一个函数使用了多个装饰器,执行的顺序是什么?

一起来看个案例:

def fun1(fun1_name):def fun2():print("fun1装饰器调用")fun1_name()return fun2def fun2(fun2_name):def fun3():print("fun2装饰器调用")fun2_name()return fun3@fun2
@fun1
def fun4():print("fun4函数调用")fun4()

所以:

一个函数,可以使用多个装饰器

如果一个函数使用了多个装饰器,执行顺序,是按照装饰器的顺序,从上往下执行的 

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

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

相关文章

uniapp最简单的底部兼容安全区域显示

效果图&#xff1a; 1.html写上动态padding-bottom <view class"button-wrap" :style"padding-bottom:bottomPaddingrpx"><view class"com-btn cencel-btn">取消</view><view class"com-btn confirm-btn " cl…

PLSQL启动错误,缺失oci.dll文件如何解决

Oracle数据库启动的时候报错&#xff0c;无法打开 报错显示缺失dll文件 第一步&#xff1a;在网上找到可靠的下载文件地址&#xff1a; 官方网站下载对应版本的oci.dll 链接如下&#xff1a;https://www.oracle.com/database/technologies/instant-client/winx64-64-downloa…

Elementui Radio单选框取消选中

问题&#xff1a; 最近开发一个后台项目的时候用到了单选框&#xff0c;而客户的要求是默认选择一个选项&#xff0c;然后点击可以取消选中。不想自己在手写一个Radio组件&#xff0c;只能在elementui的单选框上修改一下下啦。 1. .native的作用 .native的作用是在给组件添加修…

JavaWeb——后端之登录功能

6. 登录功能 6.1 登录认证 只进行用户名和密码是否存在的操作 Slf4j RestController public class LoginController {Autowiredpublic EmpService empService;PostMapping("/login")public Result login(RequestBody Emp emp) {log.info("{}员工登录", …

【案例实战】业务稳定性运行之全链路混合压测

1.全链路压测开展步骤 &#xff08;1&#xff09;什么是全链路压测 全链路压测是指基于真实业务场景&#xff0c;通过模拟海量的用户请求&#xff0c;对整个后台服务进行压力测试&#xff0c;从而评估整个系统的性能水平。 对应用程序的整个技术栈进行完整的压力和性能测试&a…

C++|19.C++类与结构体对比

类和结构体 类和结构体本质上并没有太大区别。 但两者在默认上有所区别。 类默认成员变量是私有的&#xff0c;而结构体默认成员变量是公有的。 也就是说&#xff0c;对于一个类来说&#xff0c;会默认使用private去保护其内部成员变量使得无法直接访问到其内部的变量。 同时从…

外汇天眼:台北妇女轻信假投资诈骗话术,小赚1万却惨赔1500万

当今社会物价急速上涨&#xff0c;许多民众为了避免资产因通膨缩水&#xff0c;纷纷开始寻找各种能增加收入的渠道&#xff0c;因此投资理财日渐受到重视。 然而&#xff0c;诈骗集团也注意到这趋势&#xff0c;并且推出虚假的投资平台或方案&#xff0c;以各种话术行骗。 不久…

人逢三六九,运势低迷路难走

很多人都希望自己各方面的运势都能够朝着好的方向旺盛发展&#xff0c;我们的运势将会如何发展跟我们的出生时间是离不开关系的。我们的祖先为了后人着想&#xff0c;不犯他们犯过的错误&#xff0c;少走一些弯路&#xff0c;总结了多年来的生活经验&#xff0c;创造出了一句句…

在视频号上开通店铺怎么样?全新带货平台,普通人最后的电商机会

我是王路飞。 好消息&#xff1a;现在视频号上也可以开店、带货、做电商了。 坏消息&#xff1a;有一定的门槛&#xff08;尤其是资金方面&#xff09;。 视频号小店代表的是“全村的希望”&#xff08;腾讯马老板在22年底内部员工大会上的发言内容&#xff09;&#xff0c;…

Vue使用printJS导出网页为pdf、printJS导出pdf

先放几个参考链接 感谢&#xff01; Vue使用PrintJS实现页面打印功能_vue print.js 设置打印pdf的大小-CSDN博客 前台导出pdf经验汇总 &#xff08;html2canvas.js和浏览器自带的打印功能-print.js&#xff09;以及后台一些导出pdf的方法_iqc后台管理系统怎么做到导出pdf-CSD…

互联网外包公司干了2个月,技术退步明显了.......

先说一下自己的情况&#xff0c;本科毕业&#xff0c;18年通过校招进入南京某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能…

Aging:浙大学者研究发现,多吃这类抗氧化饮食,延缓衰老

撰文 | 宋文法 衰老&#xff0c;是一个复杂、多阶段、渐进的过程&#xff0c;发生在生命的整个过程。随着时间的流逝&#xff0c;人体的器官、肌肉会逐渐衰老&#xff0c;一些疾病也伴随着年龄的增长而发生&#xff0c;包括癌症、糖尿病、心血管疾病等。 衰老过程是由体内自由基…