Python中logging.NullHandler 的使用教程

yipeiwu_com5年前Python基础

在使用 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综合应用名片管理系统案例详解

Python综合应用名片管理系统案例详解

本文实例讲述了Python综合应用名片管理系统。分享给大家供大家参考,具体如下: 综合应用已经学习过的知识点: 变量 流程控制 函数 模块 开发 名片管理系统 系统需...

Python多进程fork()函数详解

进程 进程是程序的一次动态执行过程,它对应了从代码加载、执行到执行完毕的一个完整过程。进程是系统进行资源分配和调度的一个独立单位。进程是由代码(堆栈段)、数据(数据段)、内核状态和一组寄...

python调用机器喇叭发出蜂鸣声(Beep)的方法

本文实例讲述了python调用机器喇叭发出蜂鸣声(Beep)的方法。分享给大家供大家参考。具体分析如下: 下面这段python代码可调用机器喇叭发出蜂鸣声(Beep),当然你的喇叭必须能...

Python 的字典(Dict)是如何存储的

Python 的字典(Dict)是如何存储的

前言 Python 的字典有好多个名称("映射"、"哈希"、"散列"或者"关系数组"),那你知道为什么字典会被称为 Hash(翻译为"哈希"或"散列")吗? 你知道为什么字典对于键(K...

PyCharm配置mongo插件的方法

PyCharm配置mongo插件的方法

一、安装mongo plugs插件 File->Setting Plugins查询Mongo选择Search in repositories 选择Mongo plugins,选...