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 遍历子文件和所有子文件夹的代码实例
Dec 21 Python
完美解决Python2操作中文名文件乱码的问题
Jan 04 Python
python中pandas.DataFrame排除特定行方法示例
Mar 12 Python
详解Python3网络爬虫(二):利用urllib.urlopen向有道翻译发送数据获得翻译结果
May 07 Python
python控制台实现tab补全和清屏的例子
Aug 20 Python
django实现类似触发器的功能
Nov 15 Python
使用Python制作缩放自如的圣诞老人(圣诞树)
Dec 25 Python
Python类继承和多态原理解析
Feb 05 Python
python框架flask入门之路由及简单实现方法
Jun 07 Python
tensorflow下的图片标准化函数per_image_standardization用法
Jun 30 Python
Python实现哲学家就餐问题实例代码
Nov 09 Python
python中的random模块和相关函数详解
Apr 22 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
农民C键的运用技巧
2020/03/04 星际争霸
Yii 框架控制器创建使用及控制器响应操作示例
2019/10/14 PHP
PHP实现简单用户登录界面
2019/10/23 PHP
JavaScript实现禁止后退的方法
2006/12/27 Javascript
在一个form用一个SUBMIT(或button)分别提交到两个处理表单页面的代码
2007/02/15 Javascript
用js实现的一个Flash滚动轮换显示图片代码生成器
2007/03/14 Javascript
根据鼠标的位置动态的控制层的位置
2009/11/24 Javascript
基于JS实现仿京东搜索栏随滑动透明度渐变效果
2017/07/10 Javascript
js单页hash路由原理与应用实战详解
2017/08/14 Javascript
EasyUI创建人员树的实例代码
2017/09/15 Javascript
解决vue-cli项目打包出现空白页和路径错误的问题
2018/09/04 Javascript
Node.js的进程管理的深入理解
2019/01/09 Javascript
详解vuex之store源码简单解析
2019/06/13 Javascript
让 babel webpack vue 配置文件支持智能提示的方法
2019/06/22 Javascript
vue下canvas裁剪图片实例讲解
2020/04/16 Javascript
vue接通后端api以及部署到服务器操作
2020/08/13 Javascript
js实现扫雷源代码
2020/11/27 Javascript
[47:45]Liquid vs OG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python类的多重继承问题深入分析
2014/11/09 Python
python reduce 函数使用详解
2017/12/05 Python
python opencv实现任意角度的透视变换实例代码
2018/01/12 Python
python链接oracle数据库以及数据库的增删改查实例
2018/01/30 Python
Python网络爬虫神器PyQuery的基本使用教程
2018/02/03 Python
python由已知数组快速生成新数组的方法
2020/04/08 Python
解决启动django,浏览器显示“服务器拒绝访问”的问题
2020/05/13 Python
HTML5的结构和语义(5):交互
2008/10/17 HTML / CSS
麦德龙官方海外旗舰店:德国麦德龙超市
2017/12/23 全球购物
zooplus波兰:在线宠物店
2019/07/21 全球购物
ZWILLING双立人法国网上商店:德国刀具锅具厨具品牌
2019/08/28 全球购物
css animation配合SVG制作能量流动效果
2021/03/24 HTML / CSS
工作鉴定评语
2014/05/04 职场文书
酒店管理专业自荐信
2014/05/23 职场文书
2014年党的群众路线活动个人整改措施
2014/10/28 职场文书
孕妇离婚协议书范本
2014/11/20 职场文书
创建文明城市倡议书
2015/04/28 职场文书
Spring Boot两种全局配置和两种注解的操作方法
2021/06/29 Java/Android