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使用pyhook监控键盘并实现切换歌曲的功能
Jul 18 Python
使用Python中的cookielib模拟登录网站
Apr 09 Python
用Python的Tornado框架结合memcached页面改善博客性能
Apr 24 Python
用python写一个windows下的定时关机脚本(推荐)
Mar 21 Python
放弃 Python 转向 Go语言有人给出了 9 大理由
Oct 20 Python
python爬虫_微信公众号推送信息爬取的实例
Oct 23 Python
python生成ppt的方法
Jun 07 Python
python issubclass 和 isinstance函数
Jul 25 Python
对django中foreignkey的简单使用详解
Jul 28 Python
Python对excel的基本操作方法
Feb 18 Python
python实现简单倒计时功能
Apr 21 Python
python基础之错误和异常处理
Oct 24 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读取html并截取字符串的简单代码
2009/11/30 PHP
有关phpmailer的详细介绍及使用方法
2013/01/28 PHP
ThinkPHP框架任意代码执行漏洞的利用及其修复方法
2014/07/04 PHP
PHP mysqli_free_result()与mysqli_fetch_array()函数详解
2016/09/21 PHP
js加解密 脚本解密
2008/02/22 Javascript
js实现在字符串中提取数字
2013/11/05 Javascript
JavaScript中的操作符==与===介绍
2014/12/31 Javascript
JavaScript实现动画打开半透明提示层的方法
2015/04/21 Javascript
javascript实现移动端上的触屏拖拽功能
2016/03/04 Javascript
AngularJS equal比较对象实例详解
2016/09/14 Javascript
原生JS查找元素的方法(推荐)
2016/11/22 Javascript
javascript基于原型链的继承及call和apply函数用法分析
2016/12/15 Javascript
详解使用Node.js 将txt文件转为Excel文件
2017/07/05 Javascript
vue.js实现单选框、复选框和下拉框示例
2017/07/18 Javascript
vue.js数据绑定操作详解
2018/04/23 Javascript
nuxt.js中间件实现拦截权限判断的方法
2018/11/21 Javascript
node.js使用zlib模块进行数据压缩和解压操作示例
2020/02/12 Javascript
[07:20]2014DOTA2西雅图国际邀请赛 选手讲解积分赛第二天
2014/07/11 DOTA
python3.0 字典key排序
2008/12/24 Python
python操作日期和时间的方法
2014/03/11 Python
Python中字符串对齐方法介绍
2015/05/21 Python
python爬取NUS-WIDE数据库图片
2016/10/05 Python
Python 实现一行输入多个值的方法
2018/04/21 Python
使用python Telnet远程登录执行程序的方法
2019/01/26 Python
对python生成业务报表的实例详解
2019/02/03 Python
Python面向对象程序设计之私有属性及私有方法示例
2019/04/08 Python
python 模拟创建seafile 目录操作示例
2019/09/26 Python
创建索引时需要注意的事项
2013/05/13 面试题
西安交大自主招生自荐信
2014/01/27 职场文书
工程部岗位职责
2015/02/10 职场文书
2015年办公室主任工作总结
2015/04/09 职场文书
国王的演讲观后感
2015/06/03 职场文书
2016应届毕业生实习评语
2015/12/01 职场文书
安全学习心得体会范文
2016/01/18 职场文书
《将心比心》教学反思
2016/02/23 职场文书
基于Redis延迟队列的实现代码
2021/05/13 Redis