前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python:logging.NullHandler 的使用

Python:logging.NullHandler 的使用

作者头像
丹枫无迹
发布2019-01-22 15:45:13
6270
发布2019-01-22 15:45:13
举报
文章被收录于专栏:学无止境学无止境

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

代码语言:javascript
复制
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()

我们在上面代码中加上一个日志的定义:

代码语言:javascript
复制
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,具体的实现就交给调用的人去决定吧。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-11-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
日志服务
日志服务(Cloud Log Service,CLS)是腾讯云提供的一站式日志服务平台,提供了从日志采集、日志存储到日志检索,图表分析、监控告警、日志投递等多项服务,协助用户通过日志来解决业务运维、服务监控、日志审计等场景问题。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档