东莞市盛裕绒艺玩具有限公司

东莞市盛裕绒艺玩具有限公司

sal365备用APP

15868458169
联系方式
全国服务热线: 15868458169

咨询热线:13939863793
联系人:张诚
地址:湖南省长沙市芙蓉区万家丽大道中段26号百纳广场2栋A座25楼

Python:logging.NullHandler 的使用

来源:sal365备用APP   发布时间:2020-02-12   点击量:5

在使用 peewee 框架时,默认是不会出现日志消息的。

from peewee import Model, CharField, DateTimeField, IntegerFieldfrom peewee_mssql import MssqlDatabasedb = MssqlDatabase(database="test", host=".", user="sa", password="sa")class BaseModel(Model): class Meta: database = dbclass 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 logginglogger = 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,具体的实现就交给调用的人去决定吧。

相关产品

COPYRIGHTS©2017 sal365备用APP ALL RIGHTS RESERVED 备案号:5