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 排列组合之itertools
Mar 20 Python
python简单实现基数排序算法
May 16 Python
Python调用C++程序的方法详解
Jan 24 Python
关于pip的安装,更新,卸载模块以及使用方法(详解)
May 19 Python
python实现简易通讯录修改版
Mar 13 Python
python实现文本界面网络聊天室
Dec 12 Python
Python 获取指定文件夹下的目录和文件的实现
Aug 30 Python
在pycharm中debug 实时查看数据操作(交互式)
Jun 09 Python
python程序如何进行保存
Jul 03 Python
Python 开发工具通过 agent 代理使用的方法
Sep 27 Python
Python字典dict常用方法函数实例
Nov 09 Python
python 实现Harris角点检测算法
Dec 11 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 数组入门教程小结
2009/05/20 PHP
php xml留言板 xml存储数据的简单例子
2009/08/24 PHP
php setcookie函数的参数说明及其用法
2014/04/20 PHP
PHP 导出Excel示例分享
2014/08/18 PHP
php中smarty实现多模版网站的方法
2015/06/11 PHP
PHP实现将多个文件中的内容合并为新文件的方法示例
2017/06/10 PHP
用js 让图片在 div或dl里 居中,底部对齐
2008/01/21 Javascript
JQuery 学习笔记01 JQuery初接触
2010/05/06 Javascript
js获得当前时区夏令时发生和终止的时间代码
2014/02/23 Javascript
JS 排序输出实现table行号自增前端动态生成的tr
2014/08/13 Javascript
node.js实现BigPipe详解
2014/12/05 Javascript
javascript使用call调用微信API
2014/12/15 Javascript
jQuery实现简单弹窗遮罩效果
2017/02/27 Javascript
JS实现向iframe中表单传值的方法
2017/03/24 Javascript
使用jQuery和ajax代替iframe的方法(详解)
2017/04/12 jQuery
Vue.js 实现微信公众号菜单编辑器功能(二)
2018/05/08 Javascript
微信小程序实现动态显示和隐藏某个控件功能示例
2018/12/14 Javascript
JavaScript对象的特性与实践应用深入详解
2018/12/30 Javascript
详解nvm管理多版本node踩坑
2019/07/26 Javascript
JS 5种遍历对象的方式
2020/06/16 Javascript
Python程序设计入门(1)基本语法简介
2014/06/13 Python
Python socket网络编程TCP/IP服务器与客户端通信
2017/01/05 Python
Python实现压缩文件夹与解压缩zip文件的方法
2018/09/01 Python
Linux下python3.6.1环境配置教程
2018/09/26 Python
一看就懂得Python的math模块
2018/10/21 Python
对python 中re.sub,replace(),strip()的区别详解
2019/07/22 Python
matlab、python中矩阵的互相导入导出方式
2020/06/01 Python
详解python模块pychartdir安装及导入问题
2020/10/22 Python
python3代码输出嵌套式对象实例详解
2020/12/03 Python
乔丹诺(Giordano)酒庄德国官网:找到最好的意大利葡萄酒
2017/12/28 全球购物
公共事业管理本科生求职信
2013/10/07 职场文书
家长对小学生的评语
2014/01/28 职场文书
女生抽烟检讨书
2014/10/05 职场文书
乡镇党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
不同意离婚答辩状
2015/05/22 职场文书
海贼王十大逆天果实 魂魂果实上榜,岩浆果实攻击力最强
2022/03/18 日漫