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模块学习 filecmp 文件比较
Aug 27 Python
python实现web方式logview的方法
Aug 10 Python
利用Python实现图书超期提醒
Aug 02 Python
python 中random模块的常用方法总结
Jul 08 Python
Tensorflow 实现修改张量特定元素的值方法
Jul 30 Python
对python指数、幂数拟合curve_fit详解
Dec 29 Python
java判断三位数的实例讲解
Jun 10 Python
Python进阶:生成器 懒人版本的迭代器详解
Jun 29 Python
python 随机森林算法及其优化详解
Jul 11 Python
python微信公众号开发简单流程实现
Mar 09 Python
使用Numpy对特征中的异常值进行替换及条件替换方式
Jun 08 Python
Python Tkinter实例——模拟掷骰子
Oct 24 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
wordpress之wp-settings.php
2007/08/17 PHP
PHP中用header图片地址 简单隐藏图片源地址
2008/04/09 PHP
php调用mysql数据 dbclass类
2011/05/07 PHP
php json_encode奇怪问题说明
2011/09/27 PHP
php-perl哈希算法实现(times33哈希算法)
2013/12/30 PHP
PHP获取ip对应地区和使用网络类型的方法
2015/03/11 PHP
php实现图片上传并利用ImageMagick生成缩略图
2016/03/14 PHP
PHP中mysqli_get_server_version()的实例用法
2020/02/03 PHP
如何在Mozilla Gecko 用Javascript加载XSL
2007/01/09 Javascript
JavaScript 动态改变图片大小
2009/06/11 Javascript
js 创建书签小工具之理论
2011/02/25 Javascript
js实现在字符串中提取数字
2013/11/05 Javascript
封装的jquery翻页滚动(示例代码)
2013/11/18 Javascript
javascript 回调函数详解
2014/11/11 Javascript
Vue.js系列之项目搭建(1)
2017/01/03 Javascript
Angular2 路由问题修复详解
2017/03/01 Javascript
详解webpack 配合babel 将es6转成es5 超简单实例
2017/05/02 Javascript
nodejs+mongodb+vue前后台配置ueditor的示例代码
2018/01/02 NodeJs
Vue与Node.js通过socket.io通信的示例代码
2018/07/25 Javascript
jQuery实现弹幕特效
2019/11/29 jQuery
JavaScript 中的六种循环方法
2021/01/06 Javascript
Javascript中的奇葩知识,你知道吗?
2021/01/25 Javascript
python使用htmllib分析网页内容的方法
2015/05/08 Python
浅谈python import引入不同路径下的模块
2017/07/11 Python
Python实现嵌套列表及字典并按某一元素去重复功能示例
2017/11/30 Python
Python模拟随机游走图形效果示例
2018/02/06 Python
Python3.6中Twisted模块安装的问题与解决
2019/04/15 Python
Python玩转PDF的各种骚操作
2019/05/06 Python
使用OpenCV实现仿射变换—平移功能
2019/08/29 Python
在python3.64中安装pyinstaller库的方法步骤
2020/06/02 Python
酒店实习个人鉴定
2013/12/07 职场文书
战略合作意向书范本
2014/04/01 职场文书
商务助理求职信范文
2014/04/20 职场文书
物业保安岗位职责
2014/07/02 职场文书
2014大学校园光棍节活动策划书
2014/09/29 职场文书
护理工作个人总结
2015/03/03 职场文书