在使用 peewee 框架时,默认是不会出现日志消息的。
1
2
3
4
5
6
7
8
9
10
11
12
|
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() |
我们在上面代码中加上一个日志的定义:
1
2
3
4
|
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 的使用教程,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!
原文链接:http://www.cnblogs.com/gl1573/p/10037049.html