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判断文件或文件夹是否存在的三种方法
Jul 27 Python
python导出hive数据表的schema实例代码
Jan 22 Python
Python实现的栈(Stack)
Jan 26 Python
Python3中的列表生成式、生成器与迭代器实例详解
Jun 11 Python
Python中py文件转换成exe可执行文件的方法
Jun 14 Python
Python时间差中seconds和total_seconds的区别详解
Dec 26 Python
使用Tensorflow实现可视化中间层和卷积层
Jan 24 Python
完美解决pycharm导入自己写的py文件爆红问题
Feb 12 Python
Python Selenium 设置元素等待的三种方式
Mar 18 Python
Pyqt5 关于流式布局和滚动条的综合使用示例代码
Mar 24 Python
pygame用blit()实现动画效果的示例代码
May 28 Python
python 实现网易邮箱邮件阅读和删除的辅助小脚本
Mar 01 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中memcache 基本操作实例
2015/05/17 PHP
PHP生成图片验证码功能示例
2017/01/12 PHP
PHP调用Mailgun发送邮件的方法
2017/05/04 PHP
PHP命名空间namespace及use的简单用法分析
2018/08/03 PHP
php实现文章评论系统
2019/02/18 PHP
thinkPHP5框架接口写法简单示例
2019/08/05 PHP
json简单介绍
2008/06/10 Javascript
javascript之更有效率的字符串替换
2008/08/02 Javascript
JAVASCRIPT模式窗口中下载文件无法接收iframe的流
2013/10/11 Javascript
使用javascript获取页面名称
2014/12/23 Javascript
简介JavaScript中setUTCSeconds()方法的使用
2015/06/12 Javascript
JSONP原理及简单实现
2016/06/08 Javascript
详解Jquery EasyUI tree 的异步加载(遍历指定文件夹,根据文件夹内的文件生成tree)
2017/02/11 Javascript
js登录滑动验证的实现(不滑动无法登陆)
2018/01/03 Javascript
JS中Map和ForEach的区别
2018/02/05 Javascript
JavaScript面向对象继承原理与实现方法分析
2018/08/09 Javascript
js中火星坐标、百度坐标、WGS84坐标转换实现方法示例
2020/03/02 Javascript
jQuery 常用特效实例小结【显示与隐藏、淡入淡出、滑动、动画等】
2020/05/19 jQuery
聊聊vue 中的v-on参数问题
2021/01/29 Vue.js
用javascript实现倒计时效果
2021/02/09 Javascript
各种Python库安装包下载地址与安装过程详细介绍(Windows版)
2016/11/02 Python
python增加图像对比度的方法
2019/07/12 Python
python numpy中cumsum的用法详解
2019/10/17 Python
css3 transform 3d 使用css3创建动态3d立方体(html5实践)
2013/01/06 HTML / CSS
Html5应用程序缓存(Cache manifest)
2018/06/04 HTML / CSS
Swisse官方海外旗舰店:澳大利亚销量领先,自然健康品牌
2017/12/15 全球购物
俄罗斯最大的香水和化妆品网上商店:Randewoo
2020/11/05 全球购物
小学生考试获奖感言
2014/01/30 职场文书
运动会稿件100字
2014/02/21 职场文书
党的群众路线教育实践活动心得体会900字
2014/03/07 职场文书
竞选劳动委员演讲稿
2014/04/28 职场文书
浪漫婚礼主题活动策划方案
2014/09/15 职场文书
四风问题原因分析及整改措施
2014/10/24 职场文书
2015年大学元旦晚会活动策划书
2014/12/09 职场文书
工作失职检讨书
2015/01/26 职场文书
男方婚前保证书
2015/02/28 职场文书