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爬虫框架Scrapy安装使用步骤
Apr 01 Python
Python 执行字符串表达式函数(eval exec execfile)
Aug 11 Python
python自然语言编码转换模块codecs介绍
Apr 08 Python
Python+Opencv识别两张相似图片
Mar 23 Python
Python的Twisted框架上手前所必须了解的异步编程思想
May 25 Python
Python学习教程之常用的内置函数大全
Jul 14 Python
python中Matplotlib实现绘制3D图的示例代码
Sep 04 Python
pandas去重复行并分类汇总的实现方法
Jan 29 Python
详解python tkinter教程-事件绑定
Mar 28 Python
使用Python创建简单的HTTP服务器的方法步骤
Apr 26 Python
python实现银联支付和支付宝支付接入
May 07 Python
pytorch标签转onehot形式实例
Jan 02 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实现的比较完善的购物车类
2014/12/02 PHP
smarty模板的使用方法实例分析
2019/09/18 PHP
javascript循环变量注册dom事件 之强大的闭包
2010/09/08 Javascript
jquery 卷帘效果实现代码(不同方向)
2013/02/05 Javascript
javascript的propertyIsEnumerable()方法使用介绍
2014/04/09 Javascript
VS2008中使用JavaScript调用WebServices
2014/12/18 Javascript
js的toLowerCase方法用法实例
2015/01/27 Javascript
JS动态修改表格cellPadding和cellSpacing的方法
2015/03/31 Javascript
javascript实现仿腾讯游戏选择
2015/05/14 Javascript
JavaScript中getUTCSeconds()方法的使用详解
2015/06/11 Javascript
学习jQuey中的return false
2015/12/18 Javascript
使用基于Node.js的构建工具Grunt来发布ASP.NET MVC项目
2016/02/15 Javascript
BootStrap初学者对弹出框和进度条的使用感觉
2016/06/27 Javascript
详解照片瀑布流效果(js,jquery分别实现与知识点总结)
2017/01/01 Javascript
详解jquery选择器的原理
2017/08/01 jQuery
React Native中Navigator的使用方法示例
2017/10/13 Javascript
学习Vue组件实例
2018/04/28 Javascript
JavaScript递归函数定义与用法实例分析
2019/01/24 Javascript
浅析vue中的MVVM实现原理
2019/03/04 Javascript
vue pages 多入口项目 + chainWebpack 全局引用缩写说明
2020/09/21 Javascript
vue 解决IOS10低版本白屏的问题
2020/11/17 Javascript
Python SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)
2014/05/06 Python
Python编程pygal绘图实例之XY线
2017/12/09 Python
python之super的使用小结
2018/08/13 Python
python Dijkstra算法实现最短路径问题的方法
2019/09/19 Python
Python操作qml对象过程详解
2019/09/26 Python
时尚的CSS3进度条效果
2012/02/22 HTML / CSS
html5 冒号分隔符对齐的实现
2019/07/31 HTML / CSS
运动鞋、足球鞋和慕尼黑球衣:Sport Münzinger
2019/08/26 全球购物
J2EE面试题大全
2016/08/06 面试题
应届护士推荐信
2013/11/16 职场文书
周年庆典邀请函范文
2014/01/24 职场文书
八一建军节部队活动方案
2014/02/04 职场文书
教师师德考核自我评价
2014/09/13 职场文书
刑事法律意见书
2015/06/04 职场文书
pytorch实现手写数字图片识别
2021/05/20 Python