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发送邮件实例讲解(python发邮件附件可以使用email模块实现)
Dec 03 Python
python根据出生日期获得年龄的方法
Mar 31 Python
教大家使用Python SqlAlchemy
Feb 12 Python
python文件特定行插入和替换实例详解
Jul 12 Python
python爬虫爬取某站上海租房图片
Feb 04 Python
浅谈pandas中Dataframe的查询方法([], loc, iloc, at, iat, ix)
Apr 10 Python
Anaconda2下实现Python2.7和Python3.5的共存方法
Jun 11 Python
pip安装时ReadTimeoutError的解决方法
Jun 12 Python
对Python多线程读写文件加锁的实例详解
Jan 14 Python
在vscode中配置python环境过程解析
Sep 28 Python
Python切图九宫格的实现方法
Oct 10 Python
Python3.5 win10环境下导入kera/tensorflow报错的解决方法
Dec 19 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-5.2 的 php.ini 中文版[金步国翻译]
2011/04/17 PHP
CI框架实现框架前后端分离的方法详解
2016/12/30 PHP
php从数据库中读取特定的行(实例)
2017/06/02 PHP
phpcms实现验证码替换及phpcms实现全站搜索功能教程详解
2017/12/13 PHP
Laravel使用Queue队列的技巧汇总
2019/09/02 PHP
如何解决PHP获取不到SESSION信息之一般情况
2019/10/10 PHP
Thinkphp 在api开发中异常返回依然是html的解决方式
2019/10/16 PHP
理解Javascript_03_javascript全局观
2010/10/11 Javascript
js表单中选择框值的获取及表单的序列化
2015/12/17 Javascript
jquery实现的判断倒计时是否结束代码
2016/02/05 Javascript
jQuery插件支持同一页面被多次调用
2016/02/14 Javascript
详解JavaScript的另类写法
2016/04/11 Javascript
JS仿京东移动端手指拨动切换轮播图效果
2020/04/10 Javascript
vue--点击当前增加class,其他删除class的方法
2018/09/15 Javascript
vue-router命名视图的使用讲解
2019/01/19 Javascript
微信小程序实现按字母排列选择城市功能
2019/11/25 Javascript
在Vue中使用Echarts可视化库的完整步骤记录
2020/11/18 Vue.js
跟老齐学Python之网站的结构
2014/10/24 Python
使用Python脚本和ADB命令实现卸载App
2017/02/10 Python
python中字符串内置函数的用法总结
2018/09/13 Python
Win10下安装并使用tensorflow-gpu1.8.0+python3.6全过程分析(显卡MX250+CUDA9.0+cudnn)
2020/02/17 Python
Python实现分数序列求和
2020/02/25 Python
Python3批量创建Crowd用户并分配组
2020/05/20 Python
Python中操作各种多媒体,视频、音频到图片的代码详解
2020/06/04 Python
Django自定义YamlField实现过程解析
2020/11/11 Python
可能这些是你想要的H5软键盘兼容方案(小结)
2019/04/23 HTML / CSS
金讯Java笔试题目
2013/06/18 面试题
在校学生职业规划范文
2014/01/08 职场文书
发展部经理职责规定
2014/02/22 职场文书
授权委托书怎么写
2014/09/25 职场文书
2015年幼儿园教研活动总结
2015/03/25 职场文书
证券区域经理岗位职责
2015/04/10 职场文书
小学中队活动总结
2015/05/11 职场文书
导游词之四川熊猫基地
2020/01/13 职场文书
Python djanjo之csrf防跨站攻击实验过程
2021/05/14 Python
python之np.argmax()及对axis=0或者1的理解
2021/06/02 Python