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的三目运算符和not in运算符使用示例
Mar 03 Python
Python 数据结构之旋转链表
Feb 25 Python
Python实现的将文件每一列写入列表功能示例【测试可用】
Mar 19 Python
python实现爬取图书封面
Jul 05 Python
对python中dict和json的区别详解
Dec 18 Python
Pycharm设置utf-8自动显示方法
Jan 17 Python
Python GUI学习之登录系统界面篇
Aug 21 Python
使用python去除图片白色像素的实例
Dec 12 Python
Python文件操作基础流程解析
Mar 19 Python
python实现爱奇艺登陆密码RSA加密的方法示例详解
May 27 Python
TensorFlow-gpu和opencv安装详细教程
Jun 30 Python
Python绘制地图神器folium的新人入门指南
May 23 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开发工具之vs2005图解
2008/01/12 PHP
PHPMYADMIN导入数据最大为2M的解决方法
2012/04/23 PHP
Yii2单元测试用法示例
2016/11/12 PHP
iOS自定义提示弹出框实现类似UIAlertView的效果
2016/11/16 PHP
thinkPHP5.0框架环境变量配置方法
2017/03/17 PHP
Javascript实例教程(19) 使用HoTMetal(5)
2006/12/23 Javascript
js点击页面其它地方将某个显示的DIV隐藏
2012/07/12 Javascript
js判断浏览器类型的方法
2013/08/07 Javascript
禁止选中文字兼容IE、Chrome、FF等
2013/09/04 Javascript
js键盘上下左右键怎么触发function(实例讲解)
2013/12/14 Javascript
探讨JQUERY JSON的反序列化类 using问题的解决方法
2013/12/19 Javascript
jquery获取checkbox的值并post提交
2015/01/14 Javascript
基于javascript实现listbox左右移动
2016/01/29 Javascript
javascript计时器编写过程与实现方法
2016/02/29 Javascript
Angular2 (RC5) 路由与导航详解
2016/09/21 Javascript
Bootstrap Search Suggest使用例子
2016/12/21 Javascript
微信小程序实现滴滴导航tab切换效果
2018/07/24 Javascript
深入理解Angularjs 脏值检测
2018/10/12 Javascript
js实现黑白div块画空心的图形
2018/12/13 Javascript
Vue+element 解决浏览器自动填充记住的账号密码问题
2019/06/11 Javascript
微信小程序实现简单文字跑马灯
2020/05/26 Javascript
Python编程实现蚁群算法详解
2017/11/13 Python
用Python将一个列表分割成小列表的实例讲解
2018/07/02 Python
Python3 字典dictionary入门基础附实例
2020/02/10 Python
Python Dict找出value大于某值或key大于某值的所有项方式
2020/06/05 Python
如何使用Python处理HDF格式数据及可视化问题
2020/06/24 Python
CSS3实现类似翻书效果的过渡动画的示例代码
2019/09/06 HTML / CSS
彪马加拿大官网:PUMA加拿大
2018/10/04 全球购物
Fox Racing英国官网:越野摩托车和山地自行车服装
2020/02/26 全球购物
自我评价怎么写好呢?
2013/12/05 职场文书
鲜果饮品店创业计划书
2014/01/21 职场文书
绿化先进工作者事迹材料
2014/01/30 职场文书
校长四风对照检查材料
2014/09/27 职场文书
2014年实习生工作总结
2014/11/27 职场文书
单位租车协议书
2015/01/29 职场文书
python blinker 信号库
2022/05/04 Python