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中使用urllib2伪造HTTP报头的2个方法
Jul 07 Python
用Python中的__slots__缓存资源以节省内存开销的方法
Apr 02 Python
wxPython实现窗口用图片做背景
Apr 25 Python
Django添加favicon.ico图标的示例代码
Aug 07 Python
python调用百度REST API实现语音识别
Aug 30 Python
python之cv2与图像的载入、显示和保存实例
Dec 05 Python
python3+opencv3识别图片中的物体并截取的方法
Dec 05 Python
django-初始配置(纯手写)详解
Jul 30 Python
基于python3监控服务器状态进行邮件报警
Oct 19 Python
Python之Numpy的超实用基础详细教程
Oct 23 Python
python和C++共享内存传输图像的示例
Oct 27 Python
Python列表的索引与切片
Apr 07 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
法兰绒滤网冲泡
2021/03/03 冲泡冲煮
php集成开发环境详解
2019/09/24 PHP
PHP获取真实IP及IP模拟方法解析
2020/11/24 PHP
使用js画图之饼图
2015/01/12 Javascript
jQuery中unwrap()方法用法实例
2015/01/16 Javascript
jQuery判断一个元素是否可见的方法
2015/06/05 Javascript
JS+CSS实现带小三角指引的滑动门效果
2015/09/22 Javascript
浅谈JavaScript的全局变量与局部变量
2016/06/10 Javascript
javascript 秒表计时器实现代码
2017/03/09 Javascript
angular实现IM聊天图片发送实例
2017/05/08 Javascript
使用JS组件实现带ToolTip验证框的实例代码
2017/08/23 Javascript
javascript将扁平的数据转为树形结构的高效率算法
2020/02/27 Javascript
Python实现抓取页面上链接的简单爬虫分享
2015/01/21 Python
Python遍历文件夹和读写文件的实现代码
2016/08/28 Python
Python使用PIL模块生成随机验证码
2017/11/21 Python
Win7下Python与Tensorflow-CPU版开发环境的安装与配置过程
2018/01/04 Python
Python3使用pandas模块读写excel操作示例
2018/07/03 Python
删除DataFrame中值全为NaN或者包含有NaN的列或行方法
2018/11/06 Python
Matplotlib中文乱码的3种解决方案
2018/11/15 Python
使用python实现语音文件的特征提取方法
2019/01/09 Python
Python2 Selenium元素定位的实现(8种)
2019/02/25 Python
Python 调用 Outlook 发送邮件过程解析
2019/08/08 Python
python爬虫中多线程的使用详解
2019/09/23 Python
django中间键重定向实例方法
2019/11/10 Python
python爬取天气数据的实例详解
2020/11/20 Python
Pandas数据分析的一些常用小技巧
2021/02/07 Python
全球地下的服装和态度:Slam Jam
2018/02/04 全球购物
大学生冰淇淋店商业计划书
2014/01/14 职场文书
超市5.1促销活动
2014/01/15 职场文书
讲解员培训方案
2014/05/04 职场文书
化学专业自荐信
2014/05/28 职场文书
工厂门卫的岗位职责
2014/07/27 职场文书
11.9消防日宣传标语
2014/10/08 职场文书
2014党的群众路线教育实践活动总结材料
2014/10/31 职场文书
2015年化验员工作总结
2015/04/10 职场文书
为什么MySQL不建议使用SELECT *
2022/04/03 MySQL