Python如何给函数库增加日志功能


Posted in Python onAugust 04, 2020

问题

你想给某个函数库增加日志功能,但是又不能影响到那些不使用日志功能的程序。

解决方案

对于想要执行日志操作的函数库而已,你应该创建一个专属的 logger 对象,并且像下面这样初始化配置:

# somelib.py

import logging
log = logging.getLogger(__name__)
log.addHandler(logging.NullHandler())

# Example function (for testing)
def func():
  log.critical('A Critical Error!')
  log.debug('A debug message')

使用这个配置,默认情况下不会打印日志。例如:

>>> import somelib
>>> somelib.func()
>>>

不过,如果配置过日志系统,那么日志消息打印就开始生效,例如:

>>> import logging
>>> logging.basicConfig()
>>> somelib.func()
CRITICAL:somelib:A Critical Error!
>>>

讨论

通常来讲,你不应该在函数库代码中自己配置日志系统,或者是已经假定有个已经存在的日志配置了。

调用 getLogger(__name__) 创建一个和调用模块同名的logger模块。 由于模块都是唯一的,因此创建的logger也将是唯一的。

log.addHandler(logging.NullHandler()) 操作将一个空处理器绑定到刚刚已经创建好的logger对象上。 一个空处理器默认会忽略调用所有的日志消息。 因此,如果使用该函数库的时候还没有配置日志,那么将不会有消息或警告出现。

还有一点就是对于各个函数库的日志配置可以是相互独立的,不影响其他库的日志配置。 例如,对于如下的代码:

>>> import logging
>>> logging.basicConfig(level=logging.ERROR)

>>> import somelib
>>> somelib.func()
CRITICAL:somelib:A Critical Error!

>>> # Change the logging level for 'somelib' only
>>> logging.getLogger('somelib').level=logging.DEBUG
>>> somelib.func()
CRITICAL:somelib:A Critical Error!
DEBUG:somelib:A debug message
>>>

在这里,根日志被配置成仅仅输出ERROR或更高级别的消息。 不过 ,somelib 的日志级别被单独配置成可以输出debug级别的消息,它的优先级比全局配置高。 像这样更改单独模块的日志配置对于调试来讲是很方便的, 因为你无需去更改任何的全局日志配置——只需要修改你想要更多输出的模块的日志等级。

Logging HOWTO 详细介绍了如何配置日志模块和其他有用技巧,可以参阅下。

以上就是Python如何给函数库增加日志功能的详细内容,更多关于Python给函数库增加日志功能的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
详解Python中的__new__()方法的使用
Apr 09 Python
Python实现的排列组合计算操作示例
Oct 13 Python
基于python中的TCP及UDP(详解)
Nov 06 Python
python实现超市扫码仪计费
May 30 Python
python 对dataframe下面的值进行大规模赋值方法
Jun 09 Python
django2笔记之路由path语法的实现
Jul 17 Python
python监控nginx端口和进程状态
Sep 06 Python
利用python实现.dcm格式图像转为.jpg格式
Jan 13 Python
在tensorflow中实现屏蔽输出的log信息
Feb 04 Python
pandas实现excel中的数据透视表和Vlookup函数功能代码
Feb 14 Python
SpringBoot首页设置解析(推荐)
Feb 11 Python
python实现简单的井字棋
May 26 Python
pycharm导入源码的具体步骤
Aug 04 #Python
python根据用户需求输入想爬取的内容及页数爬取图片方法详解
Aug 03 #Python
Python 如何调试程序崩溃错误
Aug 03 #Python
Python 捕获代码中所有异常的方法
Aug 03 #Python
Python连接mysql数据库及简单增删改查操作示例代码
Aug 03 #Python
Python pip使用超时问题解决方案
Aug 03 #Python
python时间序列数据转为timestamp格式的方法
Aug 03 #Python
You might like
PHP 和 XML: 使用expat函数(三)
2006/10/09 PHP
SUN的《AJAX与J2EE》全文译了
2007/02/23 Javascript
JavaScript页面刷新与弹出窗口问题的解决方法
2010/03/02 Javascript
jquery新的绑定事件机制on方法的使用方法
2014/04/15 Javascript
js简单的弹出框有关闭按钮
2014/05/05 Javascript
微信中一些常用的js方法汇总
2015/03/12 Javascript
jQuery Html控件基本操作(日常收集整理)
2016/03/11 Javascript
JS跨域解决方案之使用CORS实现跨域
2016/04/14 Javascript
jQuery 局部div刷新和全局刷新方法总结
2016/10/05 Javascript
Javascript基于jQuery UI实现选中区域拖拽效果
2016/11/25 Javascript
JS中绑定事件顺序(事件冒泡与事件捕获区别)
2017/01/24 Javascript
Vue过滤器的用法和自定义过滤器使用
2017/02/08 Javascript
javascript计算渐变颜色的实例
2017/09/22 Javascript
VUE 3D轮播图封装实现方法
2018/07/03 Javascript
vue中如何去掉空格的方法实现
2018/11/09 Javascript
详解微信小程序scroll-view横向滚动的实践踩坑及隐藏其滚动条的实现
2019/03/14 Javascript
通过图带你深入了解vue的响应式原理
2019/06/21 Javascript
vue-socket.io跨域问题有效解决方法
2020/02/11 Javascript
使用JavaScript实现网页秒表功能(含开始、暂停、继续、重置功能)
2020/06/05 Javascript
[01:11]steam端dota2实名认证操作流程视频
2021/03/11 DOTA
用Python进行TCP网络编程的教程
2015/04/29 Python
基于python 处理中文路径的终极解决方法
2018/04/12 Python
Python中循环引用(import)失败的解决方法
2018/04/22 Python
对Python2与Python3中__bool__方法的差异详解
2018/11/01 Python
python 基于opencv实现高斯平滑
2020/12/18 Python
美国一家主营日韩美妆护肤品的在线商店:iMomoko
2016/09/11 全球购物
迪奥美国官网:Dior美国
2019/12/07 全球购物
介绍一下gcc特性
2012/01/20 面试题
市场营销专业个人求职信范文
2013/12/14 职场文书
教师中国梦演讲稿
2014/04/23 职场文书
党员贯彻十八大精神思想汇报范文
2014/10/25 职场文书
2014年大学宣传部工作总结
2014/12/19 职场文书
建筑质检员岗位职责
2015/04/08 职场文书
军训通讯稿范文
2015/07/18 职场文书
基于Python实现的购物商城管理系统
2021/04/27 Python
用Python将GIF动图分解成多张静态图片
2021/06/11 Python