Python中logging.NullHandler 的使用教程


Posted in Python onNovember 29, 2018

在使用 peewee 框架时,默认是不会出现日志消息的。

from peewee import Model, CharField, DateTimeField, IntegerField
from peewee_mssql import MssqlDatabase
db = MssqlDatabase(database='test', host='.', user='sa', password='sa')
class BaseModel(Model):
 class Meta:
  database = db
class Person(BaseModel):
 Name = CharField(verbose_name='姓名', max_length=20)
 Age = IntegerField(verbose_name='年龄')
 Birthday = DateTimeField(verbose_name='生日', null=True)
p = Person(Name='张三', Age='20', Birthday='2018-01-01')
p.save()

我们在上面代码中加上一个日志的定义:

import logging
logger = logging.getLogger('peewee')
logger.setLevel(logging.DEBUG)
logger.addHandler(logging.StreamHandler())

神奇的现象出现了,运行程序打出了一行日志:

我们虽然定义了日志,但是并没有写任何的日志,那么这一行日志是哪里来的呢?

查看 peewee 的源码,发现其中有日志的定义:

关于 logging.NullHandler,网上大多数的解释就一句话:该 Handler 实例会忽略 error messages,通常被想使用 logging 的 library 开发者使用来避免'No handlers could be found for logger XXX'信息的出现。

乍看没明白,仔细一想就明白了,其实很简单。logging.getLogger(name) 方法是使用工厂方法返回一个 logger 实例,如果名为 name 的 logger 已存在,则直接将其返回。

在 peewee 中,定义了一个名为“peewee”的 logger,但是只给了一个 NullHandler,我们在代码中,logger = logging.getLogger('peewee'),这句实则就是获取了 peewee 中定义的 logger,并给它添加了一个 StreamHandler,那自然就可以输出日志了。不信?给自己代码中的 logger 改个名字,看看还有日志输出不。

我们在写 library 的时候,也可以这样定义一个 NullHandler,具体的实现就交给调用的人去决定吧。

总结

以上所述是小编给大家介绍的Python中logging.NullHandler 的使用教程,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
python中__call__内置函数用法实例
Jun 04 Python
举例讲解Python中的迭代器、生成器与列表解析用法
Mar 20 Python
python中星号变量的几种特殊用法
Sep 07 Python
学习python中matplotlib绘图设置坐标轴刻度、文本
Feb 07 Python
python使用PIL实现多张图片垂直合并
Jan 15 Python
如何使用Python多线程测试并发漏洞
Dec 18 Python
python GUI库图形界面开发之PyQt5工具栏控件QToolBar的详细使用方法与实例
Feb 28 Python
使用pyecharts1.7进行简单的可视化大全
May 17 Python
Python CSS选择器爬取京东网商品信息过程解析
Jun 01 Python
Python生成器generator原理及用法解析
Jul 20 Python
Python列表推导式实现代码实例
Sep 09 Python
Django项目如何获得SSL证书与配置HTTPS
Apr 30 Python
Mac下Anaconda的安装和使用教程
Nov 29 #Python
windows7 32、64位下python爬虫框架scrapy环境的搭建方法
Nov 29 #Python
解决pycharm py文件运行后停止按钮变成了灰色的问题
Nov 29 #Python
pycharm debug功能实现跳到循环末尾的方法
Nov 29 #Python
在PyCharm下打包*.py程序成.exe的方法
Nov 29 #Python
selenium设置proxy、headers的方法(phantomjs、Chrome、Firefox)
Nov 29 #Python
解决PyCharm的Python.exe已经停止工作的问题
Nov 29 #Python
You might like
成本8450万,票房仅2亿,口碑两极分化,又一部DC电影扑街了
2020/04/09 欧美动漫
PHP MemCached高级缓存配置图文教程
2010/08/05 PHP
php实现快速排序法函数代码
2012/08/27 PHP
php实现遍历目录并删除指定文件中指定内容
2015/01/21 PHP
php微信公众号开发之音乐信息
2018/10/20 PHP
PHP 面向对象程序设计之类属性与类常量实现方法分析
2020/04/13 PHP
JavaScript Konami Code 实现代码
2009/07/29 Javascript
jQuery函数的等价原生函数代码示例
2013/05/27 Javascript
JavaScript表单通过正则表达式验证电话号码
2014/03/14 Javascript
jQuery学习笔记之 Ajax操作篇(二) - 数据传递
2014/06/23 Javascript
js单独获取一个checkbox看其是否被选中
2014/09/22 Javascript
js判断日期时间有效性的方法
2015/10/24 Javascript
浅谈javascript中onbeforeunload与onunload事件
2015/12/10 Javascript
javascript实现label标签跳出循环操作
2016/03/06 Javascript
Vue.js创建Calendar日历效果
2016/11/03 Javascript
浅谈关于axios和session的一些事
2017/07/13 Javascript
JavaScript变量声明var,let.const及区别浅析
2018/04/23 Javascript
node打造微信个人号机器人的方法示例
2018/04/26 Javascript
javascript关于“时间”的一次探索
2019/07/24 Javascript
python 时间信息“2018-02-04 18:23:35“ 解析成字典形式的结果代码详解
2018/04/19 Python
PyCharm代码回滚,恢复历史版本的解决方法
2018/10/22 Python
python处理multipart/form-data的请求方法
2018/12/26 Python
python3 xpath和requests应用详解
2020/03/06 Python
python将数据插入数据库的代码分享
2020/08/16 Python
AmazeUI折叠式卡片布局,整合内容列表、表格组件实现
2020/08/20 HTML / CSS
纽约现代艺术博物馆商店:MoMA STORE(室内家具和杂货商品)
2016/08/02 全球购物
波兰最大的儿童服装连锁店之一:5.10.15.
2018/02/11 全球购物
联想智利官方网站:Lenovo Chile
2020/06/03 全球购物
一套带答案的C++笔试题
2014/01/10 面试题
编程实现去掉XML的重复结点
2014/05/28 面试题
班主任工作年限证明
2014/01/12 职场文书
关于爱情的广播稿
2014/01/16 职场文书
优秀企业获奖感言
2014/02/01 职场文书
立项申请报告范本
2015/05/15 职场文书
Spring mvc是如何实现与数据库的前后端的连接操作的?
2021/06/30 Java/Android
利用Redis实现点赞功能的示例代码
2022/06/28 Redis