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统计文本字符串里单词出现频率的方法
May 26 Python
基于Python函数的作用域规则和闭包(详解)
Nov 29 Python
python中ASCII码字符与int之间的转换方法
Jul 09 Python
Python延时操作实现方法示例
Aug 14 Python
Python实现将Excel转换成为image的方法
Oct 23 Python
在python中pandas读文件,有中文字符的方法
Dec 12 Python
Python eval的常见错误封装及利用原理详解
Mar 26 Python
GitHub 热门:Python 算法大全,Star 超过 2 万
Apr 29 Python
详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)
Jul 01 Python
Python 简单计算要求形状面积的实例
Jan 18 Python
TensorFLow 变量命名空间实例
Feb 11 Python
python虚拟环境模块venv使用及示例
Mar 04 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
MySQL数据源表结构图示
2008/06/05 PHP
PHP跳转页面的几种实现方法详解
2013/06/08 PHP
PHP魔术方法之__call与__callStatic使用方法
2017/07/23 PHP
ThinkPHP框架实现的邮箱激活功能示例
2018/06/15 PHP
启用OPCache提高PHP程序性能的方法
2019/03/21 PHP
range 标准化之获取
2011/08/28 Javascript
jQuery 瀑布流 绝对定位布局(二)(延迟AJAX加载图片)
2012/05/23 Javascript
Jquery多选下拉列表插件jquery multiselect功能介绍及使用
2013/05/24 Javascript
js中数组(Array)的排序(sort)注意事项说明
2014/01/24 Javascript
javascript设计模式之解释器模式详解
2014/06/05 Javascript
JavaScript删除指定子元素代码实例
2015/01/13 Javascript
Shell脚本实现Linux系统和进程资源监控
2015/03/05 Javascript
jQuery实现鼠标滑向当前图片高亮显示并且其它图片变灰的方法
2015/07/27 Javascript
全面总结Javascript对数组对象的各种操作
2017/01/22 Javascript
Angular.js自动化测试之protractor详解
2017/07/07 Javascript
node.js学习之断言assert的使用示例
2017/09/28 Javascript
angularjs实现时间轴效果的示例代码
2017/11/29 Javascript
layui多iframe页面控制定时器运行的方法
2019/09/05 Javascript
js实现直播点击飘心效果
2020/08/19 Javascript
Python中replace方法实例分析
2014/08/20 Python
Python生成数字图片代码分享
2017/10/31 Python
python如何通过twisted实现数据库异步插入
2018/03/20 Python
Python向Excel中插入图片的简单实现方法
2018/04/24 Python
PYTHON绘制雷达图代码实例
2019/10/15 Python
Pygame框架实现飞机大战
2020/08/07 Python
HTML5 History API 实现无刷新跳转
2016/01/11 HTML / CSS
英国和世界各地鲜花速递专家:Arena Flowers
2018/02/10 全球购物
美国经典刺绣和字母儿童服装特卖:Smocked Auctions
2018/07/16 全球购物
苏格兰在线威士忌商店:The Whisky Barrel
2019/05/07 全球购物
迪士尼英国官方商店:shopDisney UK
2019/09/21 全球购物
方法名是否可以与构造器的名字相同
2012/06/04 面试题
怎样写留学自荐信
2013/11/11 职场文书
残疾人小组计划书
2014/04/27 职场文书
实习推荐信格式模板
2015/03/27 职场文书
Python实现天气查询软件
2021/06/07 Python
中国古风插画师排行榜:夏达第一,第三是阴阳师姑获鸟皮肤创作者
2022/03/18 国漫