Python中logging.NullHandler 的使用教程
在使用peewee框架时,默认是不会出现日志消息的。
frompeeweeimportModel,CharField,DateTimeField,IntegerField frompeewee_mssqlimportMssqlDatabase db=MssqlDatabase(database='test',host='.',user='sa',password='sa') classBaseModel(Model): classMeta: database=db classPerson(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()
我们在上面代码中加上一个日志的定义:
importlogging logger=logging.getLogger('peewee') logger.setLevel(logging.DEBUG) logger.addHandler(logging.StreamHandler())
神奇的现象出现了,运行程序打出了一行日志:
我们虽然定义了日志,但是并没有写任何的日志,那么这一行日志是哪里来的呢?
查看peewee的源码,发现其中有日志的定义:
关于logging.NullHandler,网上大多数的解释就一句话:该Handler实例会忽略errormessages,通常被想使用logging的library开发者使用来避免'NohandlerscouldbefoundforloggerXXX'信息的出现。
乍看没明白,仔细一想就明白了,其实很简单。logging.getLogger(name)方法是使用工厂方法返回一个logger实例,如果名为name的logger已存在,则直接将其返回。
在peewee中,定义了一个名为“peewee”的logger,但是只给了一个NullHandler,我们在代码中,logger=logging.getLogger('peewee'),这句实则就是获取了peewee中定义的logger,并给它添加了一个StreamHandler,那自然就可以输出日志了。不信?给自己代码中的logger改个名字,看看还有日志输出不。
我们在写library的时候,也可以这样定义一个NullHandler,具体的实现就交给调用的人去决定吧。
总结
以上所述是小编给大家介绍的Python中logging.NullHandler的使用教程,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!