Python 自制简单实用的日志装饰器

封装,装饰器封装,类成员和静态方法,魔术方法,自制一个名片系统 在Python中,没有真正的私有属性,但可以使用命名约定来标识哪些属性是“私有”的。通常,通过在属性名前面加上单下划线(_)或双下划线(__)来表示它们是“受保护的”或“私有的”。单下划线只是一个约定,表示这个属性不应该被外部直接访问,而双下划线会导致Python名称改写(name mangling),使得属性名更难从外部访问。在Python中,装饰器(decorator)是一种高级功能,它允许你在不修改原有函数或方法定义的情况下,为其添加额外的功能或行为。工具方法(不需要访问类属性和类方法) 阅读详情

在写代码的时候,往往会漏掉日志这个关键因素,导致功能在使用的时候出错却无法溯源。

其实,只需要写一个非常简单的日志装饰器,我们就能大大提升排查问题的效率。

1.简陋版装饰器

写一个装饰器非常简单,因为本质上装饰器就是一个返回函数的“高阶”函数而已:

1) 函数作为参数传递进装饰器。
2) 装饰器内定义一个函数,处理作为参数传递进来的函数。
3) 返回这个装饰器内定义的函数


用一下试试看:


效果如下:



虽然这样可以实现我们所需要的功能,但其实有很大的优化空间。

2.普通版装饰器

第一版代码中有一个显而易见的问题,装饰器内定义的处理函数不支持kwargs,而在装饰器中支持kwargs仅仅是举手之劳而已。

第二个问题是,生成时间戳的时候采用字符串截取的形式,这种形式过于粗暴。其实可以使用strftime做字符串转换。

修改如下:


似乎优化得差不多了,不过依然存在改进空间。

3.优化版装饰器

在前两版代码中,我们使用print进行日志输出,其实这种处理日志的方式并不标准。

使用logging模块控制日志输出是一个更好地选择。

为了使用logging模块记录日志,我们需要先配置好logging相关的选项。

1) 首先,生成一个日志记录器,并配置日志等级:

2) 配置日志格式、增加handler控制输出流:


此处可以设置handler所需要处理的日志等级,没有设置则默认使用logger自身的Level,即DEBUG等级。

3) 最后,将此handler加入到日志记录器内:

logging 完整配置如下:

使用的时候非常简单,就是把print换成logger.debug即可:



效果如下:



这样,一个比较完善的日志装饰器就完成了。

附常用的日志等级配置:

我们的文章到此就结束啦,如果你喜欢今天的Python 实战教程,请持续关注我们。

最后推荐一下我们的星球:由菜鸟学Python原班人马建了一个投资星球,汇聚一批喜欢投资的朋友一起分享投资的技巧,不限于基金,股票等其他品种,提高自己的财商,一起读书打卡,欢迎加入。





推荐阅读:入门: 最全的零基础学Python的问题  | 零基础学了8个月的Python  | 实战项目 |学Python就是这条捷径干货:爬取豆瓣短评,电影《后来的我们》 | 38年NBA最佳球员分析 |   从万众期待到口碑扑街!唐探3令人失望  | 笑看新倚天屠龙记 | 灯谜答题王 |用Python做个海量小姐姐素描图 |碟中谍这么火,我用机器学习做个迷你推荐系统电影趣味:弹球游戏  | 九宫格  | 漂亮的花 | 两百行Python《天天酷跑》游戏!AI: 会做诗的机器人 | 给图片上色 | 预测收入 | 碟中谍这么火,我用机器学习做个迷你推荐系统电影小工具: Pdf转Word,轻松搞定表格和水印! | 一键把html网页保存为pdf!|  再见PDF提取收费! | 用90行代码打造最强PDF转换器,word、PPT、excel、markdown、html一键转换 | 制作一款钉钉低价机票提示器! |60行代码做了一个语音壁纸切换器天天看小姐姐!|年度爆款文案1).卧槽!Pdf转Word用Python轻松搞定!2).学Python真香!我用100行代码做了个网站,帮人PS旅行图片,赚个鸡腿吃3).首播过亿,火爆全网,我分析了《乘风破浪的姐姐》,发现了这些秘密 4).80行代码!用Python做一个哆来A梦分身 5).你必须掌握的20个python代码,短小精悍,用处无穷 6).30个Python奇淫技巧集 7).我总结的80页《菜鸟学Python精选干货.pdf》,都是干货 8).再见Python!我要学Go了!2500字深度分析!9).发现一个舔狗福利!这个Python爬虫神器太爽了,自动下载妹子图片点阅读原文,领AI全套资料!
从 Product Master 视角理解 Configurable Products 摘要:SAP S/4HANA中的可配置产品(Configurable Products)通过集中管理产品变体解决主数据膨胀问题。以汽车和服务器为例,销售端显示为单一产品,生产端则处理多维度组合。核心机制包括:1)使用KMAT物料类型或Configurable标记;2)通过特征(characteristics)定义可选项;3)用分类(class)组织特征;4)配置档案(configuration profile)控制业务逻辑。这种设计将客户选择与主数据解耦,避免为每个组合创建独立物料,同时支持销售配置、生产B 阅读详情

相关推荐

Android Audio常见问题分析方法

分析audio dump,确定写给BT的data是否正常,MTK平台Android原生架构分析threadloop write节点,高通平台分析QXDM 1586节点,从dump确定问题大概位置。分析systrace 确定性能。AudioFocus状态(用于播放或者音量异常的情况)。AudioTrack是否正常创建bt连接是否正常通路异常,setMode,setSpeakerphoneOn等都会影响设备选择,sco调用流程是否正常。

一条老狗的博客 2389

Python装饰器使用(处理日志)

处理日志

weixin_45246215的博客 762

VirtualBox虚拟机上ubuntu系统安装问题记:显示画面太小、启动就异常退出等

报错:Failed to load R0 module D:/VMMR0.r0: The path is not clean of leading double slashes: ‘D:/VMMR0.r0’ (VERR_SUPLIB_PATH_NOT_CLEAN).解决方法特别简单,就是安装VIrtualBox的时候不要安装在CDE等盘根目录下。首先VirtualBox的下载安装过程是比较简单的,此处就不赘述了。然后E盘下新建个目录,安装到这个目录下就可解决。

qq_42595610的博客 2826

log日志装饰器

import logging, time, os from functools import wraps import traceback """handlers是什么?""" # logging模块中包含的类 # 用来自定义日志对象的规则(比如:设置日志输出格式、等级等) # 常用子类:StreamHandler、FileHandler #StreamHandler 控制台输出日志 #FileHandler 日志输出到文件 BASE_PATH = os.path.dirname(os.path.dir

qq_42610167的博客 1030

使用TensorFlow Lite Micro流程记录(带源码)

记录如何使用tensorflow lite micro,以及期间解决的问题

ZhaoDongyu_AK47的博客 6217

华大 HC32F460 DMA数据传输实战:从配置到中断处理的完整指南

本文提供了华大半导体HC32F460微控制器DMA(直接内存访问)功能的完整实战指南。详细解析了DMA的配置流程、中断处理机制以及软件与硬件触发方式,并附有实验代码示例。通过合理使用DMA进行数据传输,可以显著解放CPU资源,提升嵌入式系统的实时性与运行效率。

weixin_29194255的博客 255

python装饰器实现单例模式_Python中的单例模式——装饰器实现剖析

原博文2018-02-19 20:59 −Python中单例模式的实现方法有多种,但在这些方法中属装饰器版本用的广,因为装饰器是基于面向切面编程思想来实现的,具有很高的解耦性和灵活性。 单例模式定义:具有该模式的类只能生成一个实例对象。 先将代码写上 #创建实现单例模式的装饰器 1 def singleton (cls, *args, *...05003相关推荐2019-11-24 11:43 ...

weixin_39748838的博客 360

innovus:NRDB-2276 special net route layer与NanoRouteMode route layer冲突问题解决方法

NanoRouteMode中设置绕线层次2-6,但是被动到的special net有8-11的preferred route layer,这个层次可能是create_route_type+set_ccopt_property -net_type 定义的。二者绕线层次范围有冲突,导致在调整过这条net后再绕线就会提示失败。然后再下route_design 等route命令去绕别的net。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 1105

python 日志 装饰器_Python 日志方法(装饰器)

出处 :python 核心编程1.[代码][Python]代码'''Created on 2011-3-23@author: Administrator'''from time import timedef logged (when):def log(f,*args,**kargs):print('''called:function: %sargs :%rkargs:%r''' %(f,args,...

weixin_36081327的博客 314

基于STM32的智能浇花系统毕业设计(全部资料)

摘要:本文设计了一种基于STM32单片机的智能浇花系统,集成了环境温湿度检测、土壤温湿度监测、LCD显示、Wi-Fi联网及手机APP远程控制等功能。系统通过传感器实时采集环境参数,自动控制水泵工作实现智能灌溉,同时支持用户通过手机APP远程监控和调节。论文详细阐述了硬件选型、软件设计及系统测试过程,验证了系统的稳定性和实用性。该设计为家庭园艺提供了智能化解决方案,具有节水高效、操作便捷等特点。关键词:STM32;智能灌溉;远程控制;环境监测;Wi-Fi通信。

3254968421的博客 1196

手把手教你学基于 Linux 的 NPU 固件开发-第 10 讲:可靠性设计(RAS)——让系统坚如磐石错误检测、纠正与上报机制(ECC、Parity)

组件推荐保护机制备注HBM/DDRScrubbing必须开启,定期巡检片上 SRAMECC(权重/激活值),Parity(指令)权衡面积与可靠性计算单元ABFT或DMR(关键路径)防止计算逻辑错误片上网络CRC重传保证数据传输完整性系统软件AER 上报CE 监控自动恢复闭环管理,杜绝 SDC运维策略预测性维护Checkpoint变被动为主动核心心法(信任硬件,但必须验证。在纳米尺度下,错误是必然发生的物理现象。

MHD0815的博客 92

python装饰器_Python装饰器是个什么鬼?

不知道大家的Python入门的怎么样了啊?后面几篇Python的文章涉及一些Python中高级的内容,建议还没入门的朋友好好阅读一下如何快速入门Python赶紧上车。后台回复"python"关键词获取python入门和进阶的经典电子书pdf。这一篇我们主要介绍一下Python中装饰器的常见用法。所谓的装饰器,其实就是通过装饰器函数,来修改原函数的一些功能,使得原函数不需要修改。函数也是对...

weixin_39963465的博客 182

AI Agent在智能广告投放中的应用

随着互联网的快速发展,广告投放市场变得越来越复杂和竞争激烈。传统的广告投放方式往往难以精准地触达目标受众,导致广告资源的浪费。AI Agent作为一种智能的自动化程序,能够在复杂的环境中自主学习、决策和执行任务。本文章的目的在于深入探讨AI Agent在智能广告投放中的应用,研究如何利用AI Agent提高广告投放的精准度、效率和效果,降低成本。范围涵盖了AI Agent的基本原理、相关算法、在广告投放中的具体应用场景以及实际案例分析等方面。

欢迎来到我的优快云空间!这里聚焦AI大模型应用实战,分享前沿技术、实战案例与开发经验。 619

Python:关于装饰器

目的   AOP编程,解耦。 一是为了少写代码,二是为了解耦。 为了把重点放在装饰器上,本文的代码没有引入很多包。大概要引入datetime,math等。     例子 问题提出 比如,需要添加一些通用的动作,又不想在原有的函数里面修改。   e.g. 要在函数执行前打印出执行的时间(相当于写日志)。   def say(): print('hi')    ...

qcyfred的博客 684

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Python装饰器全解析:从语法糖到高阶函数与闭包的本质

在Python编程中,高阶函数和闭包是函数式编程的核心概念,它们允许函数作为参数传递、返回函数以及捕获外部状态。这些特性共同构成了装饰器的底层原理,使得开发者能够在不修改原函数代码的情况下,动态地为函数添加日志、计时、权限校验等横切关注点功能。装饰器作为一种强大的元编程工具,其技术价值在于实现了关注点分离,提升了代码的可复用性和可维护性。在实际工程实践中,装饰器广泛应用于Web框架路由注册、性能监控、缓存优化等场景。本文以Python中的@staticmethod和@property等高频搜索关键词为例,深

weixin_30905133的博客 345

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

[Python公开课]零基础玩转Python基础篇----第七节:Python中的高级函数

[Python公开课]零基础玩转Python基础篇----第七节:Python中的高级函数

拥有百余位万粉技术博主、200余位可合作代发博主,私域技术社群规模达千人,商务合作私信 4244

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【Python数据分析300个实用技巧】147.高级技巧与黑科技之元编程进阶:用AST分析和修改代码结构

错误示例:用字符串处理获取函数名print(code[4:code.index('(')]) # 输出'hello',但遇到装饰器就失效这种字符串截取方式遇到多行定义、装饰器等复杂情况就会崩溃。批量修改代码如同操作JSON数据实现IDE都做不到的代码转换深入理解Python的语法机制记住,每个你解决的AST难题,都是在积累"代码炼金术"的经验值。当你能轻松把2000行重复代码变成自动生成的元程序时,那种掌控感,比通关最难的BOSS战还要爽!

1073

Python的面向切面编程(AOP)(通过故事来学习)

在一个名为“魔法世界”的大陆上,有一群魔法师们,他们都有着各自的魔法力量,可以施展出各种神奇的魔法。然而,他们也有着各自的缺点,例如有些魔法师缺乏耐心,有些魔法师缺乏自制力。最终,魔法师们发现,Python的面向切面编程可以让他们的魔法变得更加高效、更加健壮。他们开始尝试使用Python的装饰器来实现不同的功能,如对函数运行时间进行统计,对函数的参数和返回值进行验证等等。有一天,一位年轻的魔法师,名叫艾米莉,发现了一个新的魔法,可以帮助自己和其他魔法师们改正缺点,并且可以让魔法更加高效。

pcaidong_2的专栏 520

Python Pytest用于在执行测试用例前生成日志文件

fixture是一种用于提供测试用例所需资源的机制,可以在测试用例执行前或执行后进行一些准备或清理操作。函数来获取日志文件路径了,而不必每次都写一遍生成日志文件和设置日志文件路径的代码。的fixture,用于在执行测试用例前生成日志文件,并将日志文件路径传递给。方法生成当前时间的字符串,用于作为日志文件名的一部分。你可以将这段代码封装成一个函数,以便在其他地方使用。函数来获取日志文件路径,以保证代码的复用性。插件的一个方法,用于设置日志文件路径。拼接日志文件的完整路径,其中。表示日志文件存放的相对路径,

weixin_45471729的博客 504

制定一个30天学习Python的计划

以下是专为设计的,兼顾系统性与实操性,帮助你从入门到初步掌握核心技能。每天建议学习时间约1-2小时(可根据个人节奏调整)。

bsklhao的博客 1538

HAP-python开发教程:一步步打造自定义智能配件(附完整代码)

想让你的树莓派、温湿度传感器或自制灯泡被 iPhone 的"家庭"App 直接控制?**HAP-python** 就是帮你实现这一目标的最佳选择。它是 HomeKit 配件协议(HAP)的纯 Python 实现,只需几行代码,就能把你自己的设备伪装成一个"原生态"的 HomeKit 配件,用 Siri 语音控制、扫码配对、局域网内自动发现,通通不在话下。本教程将带你从零开始,一步步用 HAP-py

gitblog_00150的博客 461

有了PySnooper,不用print、不用debug轻松查找问题所在!

PySnooper是一个非常方便的调试器,它是通过python注解的方式来对函数的执行过程进行监督的。应用起来比较简单,不用一步一步的去走debug来查找问题所在,并且将运行过程中函数的变量值打印出来结果一目了然,相当于替代了print函数的打印过程。可以直接在定义的函数上面加一个pysnooper装饰器,它能自动识别到语句和变量并将其值print出来,并且可以将运行过程中打印的数据直接保存到自定义的日志文件中。

梦在硅谷的博客 912

想学python编程,先学什么,想学python编程要多久

6.Web开发基础Python之Web开发基础学习内容为HTML基础、CSS基础、JavaScript基础、局部变量和全局变量、集合、数组、字典、函数参数、原型、面向对象、作用域、dom编程、jquery介绍、jquery选择器、jquery属性和CSS操作、jquery文档处理、jquery筛选、jquery事件托管、jquery事件、jquery ajax、jquery扩展方法、bootstrap使用、EasyUI介绍和使用等。并会对常见数据结构和相应算法进行学习,注重表格的处理,树结构的处理知识。

神经网络爱好者 300

infinite-canvas 前端渲染优化指南:为 Script 标签正确使用 defer 与 async

在 infinite-canvas 这类面向 AI 创作的开源无限画布项目中,首屏加载性能直接决定用户对创作工具的第一印象。本指南围绕渲染性能领域的一项高影响(HIGH)最佳实践展开:**Script 标签必须显式使用 `defer` 或 `async`,消除渲染阻塞(render-blocking)**。读完本文,你将掌握 `defer` 与 `async` 的语义差异、正确的代码写法、Next

gitblog_01062的博客 383
上一篇: 据说80%的人都不懂,你会控制你的债务吗?
下一篇: 最简单的 Django 教程
菜鸟学Python
博客等级 码龄9年 8083粉丝 571原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值