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类的__getitem__和__setitem__特殊方法
Dec 25 Python
K-means聚类算法介绍与利用python实现的代码示例
Nov 13 Python
python 接口测试response返回数据对比的方法
Feb 11 Python
python实现百度语音识别api
Apr 10 Python
python正则表达式匹配[]中间为任意字符的实例
Dec 25 Python
Python 循环终止语句的三种方法小结
Jun 24 Python
django rest framework vue 实现用户登录详解
Jul 29 Python
python 类的继承 实例方法.静态方法.类方法的代码解析
Aug 23 Python
Pytorch修改ResNet模型全连接层进行直接训练实例
Sep 10 Python
Python在centos7.6上安装python3.9的详细教程(默认python版本为2.7.5)
Oct 15 Python
Python 实现定积分与二重定积分的操作
May 26 Python
Python虚拟环境virtualenv是如何使用的
Jun 20 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
dedecms 批量提取第一张图片最为缩略图的代码(文章+软件)
2009/10/29 PHP
php5.3 废弃函数小结
2010/05/16 PHP
解决PHP curl或file_get_contents下载图片损坏或无法打开的问题
2019/10/11 PHP
javascript支持firefox,ie7页面布局拖拽效果代码
2007/12/20 Javascript
javascript 清除输入框中的数据
2009/04/13 Javascript
关于JS控制代码暂停的实现方法分享
2012/10/11 Javascript
.net,js捕捉文本框回车键事件的小例子(兼容多浏览器)
2013/03/11 Javascript
对于this和$(this)的个人理解
2013/09/08 Javascript
详解javascript函数的参数
2015/11/10 Javascript
vue.js初学入门教程(1)
2016/11/03 Javascript
jQuery+Ajax请求本地数据加载商品列表页并跳转详情页的实现方法
2017/07/12 jQuery
bootstrap Table插件使用demo
2017/08/07 Javascript
JS实现多物体运动的方法详解
2018/01/23 Javascript
Node.js API详解之 readline模块用法详解
2020/05/22 Javascript
如何搜索查找并解决Django相关的问题
2014/06/30 Python
在Django的form中使用CSS进行设计的方法
2015/07/18 Python
Python网络编程中urllib2模块的用法总结
2016/07/12 Python
使用pip发布Python程序的方法步骤
2018/10/11 Python
Python3监控windows,linux系统的CPU、硬盘、内存使用率和各个端口的开启情况详细代码实例
2020/03/18 Python
python网络编程:socketserver的基本使用方法实例分析
2020/04/09 Python
OpenCV 表盘指针自动读数的示例代码
2020/04/10 Python
python和c语言哪个更适合初学者
2020/06/22 Python
用CSS3和table标签实现一个圆形轨迹的动画的示例代码
2019/01/17 HTML / CSS
澳大利亚在线购买儿童玩具:Toy Universe
2017/12/28 全球购物
俄罗斯极限运动网上商店:Board Shop №1
2020/12/18 全球购物
周鸿祎:教你写创业计划书
2013/12/30 职场文书
好军嫂事迹材料
2014/01/15 职场文书
社区健康教育实施方案
2014/03/18 职场文书
公司节能减排倡议书
2014/05/14 职场文书
民间借贷协议书范本
2014/10/01 职场文书
政府个人对照检查材料思想汇报
2014/10/08 职场文书
导师鉴定意见
2015/06/05 职场文书
干部考核工作总结2015
2015/07/24 职场文书
农贸批发市场管理制度
2015/08/07 职场文书
六年级数学教学反思
2016/02/16 职场文书
《乌鸦喝水》教学反思
2016/02/19 职场文书