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 批量更改图像尺寸到统一大小的方法
Mar 31 Python
Python批量合并有合并单元格的Excel文件详解
Apr 05 Python
使用PyCharm创建Django项目及基本配置详解
Oct 24 Python
python 移动图片到另外一个文件夹的实例
Jan 10 Python
Python实战购物车项目的实现参考
Feb 20 Python
python与C、C++混编的四种方式(小结)
Jul 15 Python
对python中基于tcp协议的通信(数据传输)实例讲解
Jul 22 Python
python双端队列原理、实现与使用方法分析
Nov 27 Python
python如何判断IP地址合法性
Apr 05 Python
python实现简单的tcp 文件下载
Sep 16 Python
基于python模拟TCP3次握手连接及发送数据
Nov 06 Python
python爬虫利用selenium实现自动翻页爬取某鱼数据的思路详解
Dec 22 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中文字符串截取函数
2013/11/12 PHP
destoon实现调用图文新闻的方法
2014/08/21 PHP
php可应用于面包屑导航的递归寻找家谱树实现方法
2015/02/02 PHP
PHP实现支持SSL连接的SMTP邮件发送类
2015/03/05 PHP
PHP函数nl2br()与自定义函数nl2p()换行用法分析
2016/04/02 PHP
php 读写json文件及修改json的方法
2018/03/07 PHP
用Javascript读取中文COOKIE的解决办法
2007/02/15 Javascript
JSON 学习之完全手册 图文
2007/05/29 Javascript
ExtJS扩展 垂直tabLayout实现代码
2009/06/21 Javascript
js使用html()或text()方法获取设置p标签的显示的值
2014/08/01 Javascript
JavaScript实现动态创建CSS样式规则方案
2014/09/06 Javascript
jquery制作LED 时钟特效
2015/02/01 Javascript
JavaScript中innerHTML,innerText,outerHTML的用法及区别
2015/09/01 Javascript
javascript实现五星评分功能
2015/11/10 Javascript
javascript正则表达式定义(语法)总结
2016/01/08 Javascript
JS实现输入框提示文字点击时消失效果
2016/07/19 Javascript
vue.js初学入门教程(2)
2016/11/07 Javascript
解析JavaScript实现DDoS攻击原理与保护措施
2016/12/26 Javascript
10个最优秀的Node.js MVC框架
2017/08/24 Javascript
node实现爬虫的几种简易方式
2019/08/22 Javascript
wxPython事件驱动实例详解
2014/09/28 Python
Python2.x和3.x下maketrans与translate函数使用上的不同
2015/04/13 Python
Django框架模板介绍
2019/01/15 Python
Python操作远程服务器 paramiko模块详细介绍
2019/08/07 Python
Python配置文件处理的方法教程
2019/08/29 Python
wxPython实现画图板
2020/08/27 Python
使用Pycharm分段执行代码
2020/04/15 Python
python 日志模块 日志等级设置失效的解决方案
2020/05/26 Python
Python grequests模块使用场景及代码实例
2020/08/10 Python
python空元组在all中返回结果详解
2020/12/15 Python
matplotlib绘制正余弦曲线图的实现
2021/02/22 Python
招聘专员岗位职责
2014/03/07 职场文书
节约用水标语
2014/06/11 职场文书
幼师大班个人总结
2015/02/13 职场文书
《彼得与狼》教学反思
2016/02/20 职场文书
解除租赁合同协议书
2016/03/21 职场文书