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脚本实现分析dns日志并对受访域名排行
Sep 18 Python
python简单实例训练(21~30)
Nov 15 Python
Python简单定义与使用二叉树示例
May 11 Python
浅析PHP与Python进行数据交互
May 15 Python
Python之列表的插入&替换修改方法
Jun 28 Python
python通过ffmgep从视频中抽帧的方法
Dec 05 Python
Python使用APScheduler实现定时任务过程解析
Sep 11 Python
python sqlite的Row对象操作示例
Sep 11 Python
python实现滑雪者小游戏
Feb 22 Python
Django实现从数据库中获取到的数据转换为dict
Mar 27 Python
python 爬虫之selenium可视化爬虫的实现
Dec 04 Python
python opencv将多个图放在一个窗口的实例详解
Feb 28 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
PHP+DBM的同学录程序(5)
2006/10/09 PHP
投票管理程序
2006/10/09 PHP
php之可变函数的实例详解
2017/09/13 PHP
在标题栏显示新消息提示,很多公司项目中用到这个方法
2011/11/04 Javascript
jQuery登陆判断简单实现代码
2013/04/21 Javascript
正负小数点后两位浮点数实现原理及代码
2013/09/06 Javascript
javascript生成随机数的方法
2014/05/16 Javascript
jQuery实现统计输入文字个数的方法
2015/03/11 Javascript
在WordPress中加入Google搜索功能的简单步骤讲解
2016/01/04 Javascript
javascript基本语法
2016/05/31 Javascript
详解VUE的状态控制与延时加载刷新
2017/03/27 Javascript
self.attachevent is not a function的解决方法
2017/04/04 Javascript
JavaScript解析任意形式的json树型结构展示
2017/07/23 Javascript
vue2.0移除或更改的一些东西(移除index key)
2017/08/28 Javascript
解决vue admin element noCache设置无效的问题
2019/11/12 Javascript
javascript前端和后台进行数据交互方法示例
2020/08/07 Javascript
解决vuex改变了state的值,但是页面没有更新的问题
2020/11/12 Javascript
Vue实现点击当前行变色
2020/12/14 Vue.js
[00:42]《辉夜杯》—职业组预选赛12月3日15点 正式打响
2015/12/03 DOTA
Python 深入理解yield
2008/09/06 Python
低版本中Python除法运算小技巧
2015/04/05 Python
PYTHON 中使用 GLOBAL引发的一系列问题
2016/10/12 Python
python Web开发你要理解的WSGI & uwsgi详解
2018/08/01 Python
详解Python odoo中嵌入html简单的分页功能
2019/05/29 Python
Flask框架模板继承实现方法分析
2019/07/31 Python
python中加背景音乐如何操作
2020/07/19 Python
使用placeholder属性设置input文本框的提示信息
2020/02/19 HTML / CSS
Street One瑞士:德国现代时装公司
2019/10/09 全球购物
澳大利亚领先的在线礼品网站:Gifts Australia
2020/08/15 全球购物
工商管理应届生求职信
2013/10/07 职场文书
财政专业求职信范文
2014/02/19 职场文书
献爱心活动总结
2014/05/07 职场文书
乡镇一岗双责责任书
2015/01/29 职场文书
Python数据分析入门之教你怎么搭建环境
2021/05/13 Python
Pyqt5将多个类组合在一个界面显示的完整示例
2021/09/04 Python
Kubernetes关键组件与结构组成介绍
2022/03/31 Servers