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 pass 语句使用示例
Mar 11 Python
Python常用随机数与随机字符串方法实例
Apr 09 Python
python一键升级所有pip package的方法
Jan 16 Python
Python urls.py的三种配置写法实例详解
Apr 28 Python
python自动化报告的输出用例详解
May 30 Python
python单例模式获取IP代理的方法详解
Sep 13 Python
python实现多张图片拼接成大图
Jan 15 Python
python使用参数对嵌套字典进行取值的方法
Apr 26 Python
Python和Java的语法对比分析语法简洁上python的确完美胜出
May 10 Python
Pytorch基本变量类型FloatTensor与Variable用法
Jan 08 Python
python第三方库学习笔记
Feb 07 Python
python 实现任务管理清单案例
Apr 25 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 uniqid函数生成唯一ID
2015/11/18 PHP
PHP单例模式是什么 php实现单例模式的方法
2016/05/14 PHP
php插件Xajax使用方法详解
2017/08/31 PHP
JavaScript几种形式的树结构菜单
2010/05/10 Javascript
javascript字符串替换及字符串分割示例代码
2013/12/12 Javascript
让JavaScript和其它资源并发下载的方法
2014/10/16 Javascript
JS简单计算器实例
2015/01/20 Javascript
JavaScrpt中如何使用 cookie 设置查看与删除功能
2017/07/09 Javascript
JS获取指定月份的天数两种实现方法
2018/06/22 Javascript
在vue中更换字体,本地存储字体非引用在线字体库的方法
2018/09/28 Javascript
node错误处理与日志记录的实现
2018/12/24 Javascript
JS实现二维数组元素的排列组合运算简单示例
2019/01/28 Javascript
微信小程序地图导航功能实现完整源代码附效果图(推荐)
2019/04/28 Javascript
js前端传json后台接收‘‘被转为quot的问题解决
2020/11/12 Javascript
react项目从新建到部署的实现示例
2021/02/19 Javascript
[47:04]LGD vs infamous Supermajor小组赛D组 BO3 第二场 6.3
2018/06/04 DOTA
跟老齐学Python之有容乃大的list(1)
2014/09/14 Python
python 换位密码算法的实例详解
2017/07/19 Python
Odoo中如何生成唯一不重复的序列号详解
2018/02/10 Python
python线程池threadpool实现篇
2018/04/27 Python
浅谈python3.6的tkinter运行问题
2019/02/22 Python
PyTorch基本数据类型(一)
2019/05/22 Python
解决django后台样式丢失,css资源加载失败的问题
2019/06/11 Python
浅谈Pandas Series 和 Numpy array中的相同点
2019/06/28 Python
Python利用scapy实现ARP欺骗的方法
2019/07/23 Python
解决在pycharm运行代码,调用CMD窗口的命令运行显示乱码问题
2019/08/23 Python
Python利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题
2020/02/21 Python
python 将视频 通过视频帧转换成时间实例
2020/04/23 Python
PyCharm最新激活码PyCharm2020.2.3有效
2020/11/18 Python
Python使用pyenv实现多环境管理
2021/02/05 Python
生物技术专业研究生自荐信
2013/09/22 职场文书
毕业生自我鉴定范文
2013/11/08 职场文书
社区道德讲堂实施方案
2014/03/21 职场文书
森马旗舰店双十一营销方案
2014/09/29 职场文书
公务员群众路线心得体会
2014/11/03 职场文书
《吃水不忘挖井人》教学反思
2016/02/22 职场文书