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抓取京东图书评论数据
Aug 31 Python
使用Python3中的gettext模块翻译Python源码以支持多语言
Mar 31 Python
在Python中编写数据库模块的教程
Apr 29 Python
Python数据结构之双向链表的定义与使用方法示例
Jan 16 Python
Django框架登录加上验证码校验实现验证功能示例
May 23 Python
关于多元线性回归分析——Python&SPSS
Feb 24 Python
python 伯努利分布详解
Feb 25 Python
Python+appium框架原生代码实现App自动化测试详解
Mar 06 Python
Python3之外部文件调用Django程序操作model等文件实现方式
Apr 07 Python
pytorch 查看cuda 版本方式
Jun 23 Python
python用Configobj模块读取配置文件
Sep 26 Python
Django Admin后台模型列表页面如何添加自定义操作按钮
Nov 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
url decode problem 解决方法
2011/12/26 PHP
浅析php数据类型转换
2014/01/09 PHP
PHP加密解密函数详解
2015/10/28 PHP
zen cart实现订单中增加paypal中预留电话的方法
2016/07/12 PHP
PHP简单字符串过滤方法示例
2016/09/04 PHP
asp.net和php的区别点总结
2019/10/10 PHP
基于逻辑运算的简单权限系统(实现) JS 版
2007/03/24 Javascript
解析arp病毒背后利用的Javascript技术附解密方法
2007/08/06 Javascript
JQuery的read函数与js的onload不同方式实现
2013/03/18 Javascript
extjs两个tbar问题探讨
2013/08/08 Javascript
使用apply方法实现javascript中的对象继承
2013/12/16 Javascript
JavaScript中按位“异或”运算符使用介绍
2014/03/14 Javascript
jQuery学习笔记之jQuery中的$
2015/01/19 Javascript
jQuery DOM删除节点操作指南
2015/03/03 Javascript
JavaScript数组各种常见用法实例分析
2015/08/04 Javascript
属于你的jQuery提示框(Tip)插件
2016/01/20 Javascript
原生js仿jquery一些常用方法(必看篇)
2016/09/20 Javascript
微信小程序 教程之小程序配置
2016/10/17 Javascript
package.json文件配置详解
2017/06/15 Javascript
JS实现unicode和UTF-8之间的互相转换互转
2017/07/05 Javascript
详解angularjs的数组传参方式的简单实现
2017/07/28 Javascript
使用async、enterproxy控制并发数量的方法详解
2018/01/02 Javascript
原生JS实现相邻月份日历
2020/10/13 Javascript
vue element el-transfer增加拖拽功能
2021/01/15 Vue.js
python实现调用其他python脚本的方法
2014/10/05 Python
DJANGO-ALLAUTH社交用户系统的安装配置
2014/11/18 Python
详解python3实现的web端json通信协议
2016/12/29 Python
python3实现基于用户的协同过滤
2018/05/31 Python
Python Tkinter Entry和Text的添加与使用详解
2020/03/04 Python
巴西宠物店在线:Geração Pet
2017/05/31 全球购物
美国宠物美容和宠物用品购物网站:Cherrybrook
2018/12/07 全球购物
生产经理的自我评价分享
2013/11/07 职场文书
应届生求职自荐信范文
2015/03/04 职场文书
行政处罚告知书
2015/07/01 职场文书
2016年情人节问候语
2015/11/11 职场文书
2016年国庆节67周年活动总结
2016/04/01 职场文书