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 相关文章推荐
Windows和Linux下使用Python访问SqlServer的方法介绍
Mar 10 Python
Python实现自动添加脚本头信息的示例代码
Sep 02 Python
用python简单实现mysql数据同步到ElasticSearch的教程
May 30 Python
python处理csv中的空值方法
Jun 22 Python
在Python中使用defaultdict初始化字典以及应用方法
Oct 31 Python
Django-Rest-Framework 权限管理源码浅析(小结)
Nov 12 Python
Python Selenium 之关闭窗口close与quit的方法
Feb 13 Python
利用pyinstaller打包exe文件的基本教程
May 02 Python
Python编写带选项的命令行程序方法
Aug 13 Python
如何利用Python开发一个简单的猜数字游戏
Sep 22 Python
python多继承(钻石继承)问题和解决方法简单示例
Oct 21 Python
python 调用js的四种方式
Apr 11 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
十天学会php(3)
2006/10/09 PHP
Adodb的十个实例(清晰版)
2006/12/31 PHP
PHP通过正则表达式下载图片到本地的实现代码
2011/09/19 PHP
PHPWind与Discuz截取字符函数substrs与cutstr性能比较
2011/12/05 PHP
PHP实现抓取HTTPS内容
2014/12/01 PHP
PHP工程师VIM配置分享
2015/12/15 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
通过JAVAScript实现页面自适应
2007/01/19 Javascript
jq选项卡鼠标延迟的插件实例
2013/05/13 Javascript
JS的Document属性和方法小结
2013/09/17 Javascript
Javascript中typeof 用法小结
2015/05/12 Javascript
javascript实现判断鼠标的状态
2015/07/10 Javascript
基于jQuery实现放大镜特效
2020/10/19 Javascript
canvas实现动态小球重叠效果
2017/02/06 Javascript
浅谈JavaScript中的apply/call/bind和this的使用
2017/02/26 Javascript
详解使用vuex进行菜单管理
2017/12/21 Javascript
React数据传递之组件内部通信的方法
2017/12/31 Javascript
angular项目中bootstrap-datetimepicker时间插件的使用示例
2018/03/15 Javascript
vue中的计算属性实例详解
2018/09/19 Javascript
小程序实现左滑删除效果
2019/07/25 Javascript
layer弹出框确定前验证:弹出消息框的方法(弹出两个layer)
2019/09/21 Javascript
vue实现分页的三种效果
2020/06/23 Javascript
Vue实现圆环进度条的示例
2021/02/06 Vue.js
[01:02:25]2014 DOTA2华西杯精英邀请赛 5 24 iG VS DK
2014/05/26 DOTA
[02:15]你好,这就是DOTA!
2015/08/05 DOTA
python pandas中对Series数据进行轴向连接的实例
2018/06/08 Python
Python matplotlib通过plt.scatter画空心圆标记出特定的点方法
2018/12/13 Python
Python3.8中使用f-strings调试
2019/05/22 Python
解决python中使用PYQT时中文乱码问题
2019/06/17 Python
利用Python进行图像的加法,图像混合(附代码)
2019/07/14 Python
详解HTML5.2版本带来的修改
2020/05/06 HTML / CSS
软件生产职位结构化面试主要考察要素及面试题库
2015/06/12 面试题
试用期员工考核制度
2014/01/22 职场文书
大学旷课检讨书
2014/01/28 职场文书
群众路线教育实践活动整改落实情况汇报
2014/10/28 职场文书
黑白记忆观后感
2015/06/18 职场文书