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在命令行下使用google翻译(带语音)
Jan 16 Python
Python实现栈的方法
May 26 Python
Ubuntu下安装PyV8
Mar 13 Python
Python中的defaultdict与__missing__()使用介绍
Feb 03 Python
Python数据预处理之数据规范化(归一化)示例
Jan 08 Python
Puppeteer使用示例详解
Jun 20 Python
基于Django的乐观锁与悲观锁解决订单并发问题详解
Jul 31 Python
FFrpc python客户端lib使用解析
Aug 24 Python
python多线程扫描端口(线程池)
Sep 04 Python
python使用turtle库绘制奥运五环
Feb 24 Python
Python运行异常管理解决方案
Mar 09 Python
django中的数据库迁移的实现
Mar 16 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
全国FM电台频率大全 - 12 安徽省
2020/03/11 无线电
计算2000年01月01日起到指定日的天数
2006/10/09 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十二)
2014/06/25 PHP
PHP转盘抽奖接口实例
2015/02/09 PHP
PHP全局变量与超级全局变量区别分析
2016/04/01 PHP
PHP实现的数独求解问题示例
2017/04/18 PHP
thinkPHP框架实现的简单计算器示例
2018/12/07 PHP
新浪微博字数统计 textarea字数统计实现代码
2011/08/28 Javascript
ie6下png图片背景不透明的解决办法使用js实现
2013/01/11 Javascript
微信小程序开发之视频播放器 Video 弹幕 弹幕颜色自定义实例
2016/12/08 Javascript
Bootstrap3 内联单选和多选框
2016/12/29 Javascript
vue2.X组件学习心得(新手必看篇)
2017/07/05 Javascript
angular学习之从零搭建一个angular4.0项目
2017/07/10 Javascript
AngularJS中下拉框的基本用法示例
2017/10/11 Javascript
使用Angular Cli如何创建Angular私有库详解
2019/01/30 Javascript
vuex + keep-alive实现tab标签页面缓存功能
2019/10/17 Javascript
JavaScript监听触摸事件代码实例
2019/12/30 Javascript
[52:02]DOTA2-DPC中国联赛 正赛 Phoenix vs Dragon BO3 第二场 2月26日
2021/03/11 DOTA
python利用elaphe制作二维条形码实现代码
2012/05/25 Python
在Python的Django框架中编写错误提示页面
2015/07/22 Python
Python常用内置模块之xml模块(详解)
2017/05/23 Python
python3.6利用pyinstall打包py为exe的操作实例
2018/10/31 Python
python将字符串list写入excel和txt的实例
2019/07/20 Python
基于Django静态资源部署404的解决方法
2019/07/28 Python
Centos7下源码安装Python3 及shell 脚本自动安装Python3的教程
2020/03/07 Python
CSS3近阶段篇之酷炫的3D旋转透视
2016/04/28 HTML / CSS
浅谈HTML5新增和废弃的标签
2019/04/28 HTML / CSS
党章学习思想汇报
2014/01/14 职场文书
学校消防安全制度
2014/01/30 职场文书
销售人员求职的自我评价分享
2014/03/15 职场文书
老公保证书范文
2014/04/29 职场文书
物理学专业求职信
2014/07/04 职场文书
导师鉴定意见
2015/06/05 职场文书
初中班主任心得体会
2016/01/07 职场文书
作文之亲情600字
2019/09/23 职场文书
Win11开始菜单添加休眠选项
2022/04/19 数码科技