zoukankan      html  css  js  c++  java
  • 【Python】logging.NullHandler 的使用

    在使用 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,具体的实现就交给调用的人去决定吧。

  • 相关阅读:
    Premiere&After Effects的实时预览插件开发
    Mac OS平台下应用程序安装包制作工具Packages的使用介绍(补充)
    kattle 发送post请求
    mybatis 动态sql表达式相关应用
    Echarts 之三 —— 地市联动数据统计二
    Echarts 之二——地市联动数据统计
    java 版本EChart使用
    dragsort html拖拽排序
    html iframe 元素之间的调用
    ORACLE lag()与lead() 函数
  • 原文地址:https://www.cnblogs.com/gl1573/p/10037049.html
Copyright © 2011-2022 走看看