当前位置: 移动技术网 > IT编程>脚本编程>Python > Python中logging.NullHandler 的使用教程

Python中logging.NullHandler 的使用教程

2018年12月04日  | 移动技术网IT编程  | 我要评论

武汉大学研究生管理系统,avbbs.tv,游戏基地群降异界txt

在使用 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 的使用教程,希望对大家有所帮助

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网