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中用于求最小值的min()方法
May 15 Python
在Django的模型和公用函数中使用惰性翻译对象
Jul 27 Python
使用Python编写基于DHT协议的BT资源爬虫
Mar 19 Python
python读取xlsx的方法
Dec 25 Python
Python中类的创建和实例化操作示例
Feb 27 Python
Python调用C语言的实现
Jul 26 Python
python sorted函数的小练习及解答
Sep 18 Python
flask框架自定义过滤器示例【markdown文件读取和展示功能】
Nov 08 Python
Python如何把多个PDF文件合并代码实例
Feb 13 Python
Python使用socketServer包搭建简易服务器过程详解
Jun 12 Python
使用python实现下载我们想听的歌曲,速度超快
Jul 09 Python
详解Flask前后端分离项目案例
Jul 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
二次元帅气男生排行榜,只想悄悄收藏系列
2020/03/04 日漫
php json与xml序列化/反序列化
2013/10/28 PHP
destoon实现调用图文新闻的方法
2014/08/21 PHP
Laravel 关联模型-关联新增和关联更新的方法
2019/10/10 PHP
删除重复数据的算法
2006/11/23 Javascript
JavaScript中this的使用详解
2013/11/08 Javascript
在JavaScript里防止事件函数高频触发和高频调用的方法
2014/09/06 Javascript
JavaSciprt中处理字符串之sup()方法的使用教程
2015/06/08 Javascript
浅析$.getJSON异步请求和同步请求
2016/06/06 Javascript
将鼠标焦点定位到文本框最后(代码分享)
2017/01/11 Javascript
bootstrap响应式导航条模板使用详解(含下拉菜单,弹出框)
2017/11/17 Javascript
解决vue 项目引入字体图标报错、不显示等问题
2018/09/01 Javascript
Vue.js实现大屏数字滚动翻转效果
2019/11/29 Javascript
js实现简单的秒表
2020/01/16 Javascript
echarts实现获取datazoom的起始值(包括x轴和y轴)
2020/07/20 Javascript
Python中struct模块对字节流/二进制流的操作教程
2017/01/21 Python
matplotlib subplots 调整子图间矩的实例
2018/05/25 Python
python itchat给指定联系人发消息的方法
2019/06/11 Python
pygame编写音乐播放器的实现代码示例
2019/11/19 Python
Python ORM编程基础示例
2020/02/02 Python
Python 输出详细的异常信息(traceback)方式
2020/04/08 Python
Python logging模块写入中文出现乱码
2020/05/21 Python
Python中SQLite如何使用
2020/05/27 Python
Numpy实现卷积神经网络(CNN)的示例
2020/10/09 Python
详解CSS3的图层阴影和文字阴影效果使用
2016/06/09 HTML / CSS
Nordgreen美国官网:在线购买极简主义斯堪的纳维亚手表
2019/07/24 全球购物
英国哈罗德园艺:Harrod Horticultural
2020/03/31 全球购物
面向对象编程OOP的优点
2013/01/22 面试题
是否有自动比较结构的方法
2015/06/03 面试题
经典c++面试题五
2014/12/17 面试题
总裁助理岗位职责
2014/02/17 职场文书
体育之星事迹材料
2014/05/11 职场文书
2014年安全生产责任书
2014/07/22 职场文书
大学生党员自我批评思想汇报
2014/10/10 职场文书
自我检讨书范文
2015/01/28 职场文书
使用JS前端技术实现静态图片局部流动效果
2022/08/05 Javascript