Python:logging.NullHandler 的使用
程序员文章站
2022-07-05 16:05:46
关于 logging.NullHandler,网上大多数的解释就一句话:该 Handler 实例会忽略 error messages,通常被想使用 logging 的 library 开发者使用来避免'No handlers could be found for logger XXX'信息的出现。其... ......
在使用 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,具体的实现就交给调用的人去决定吧。
推荐阅读
-
linux上很方便的上传下载文件工具rz和sz使用介绍
-
Navicat For MySQL的简单使用教程
-
万兴神剪手如何制作抖音相册视频?使用万兴神剪手制作抖音相册视频的方法
-
linux更改目录文件的拥有者和拥有组(使用chown实现)
-
Linux系统下使用mail发送Internet邮件的配置方法
-
Win7系统QQ语音功能无法使用如何解决?Win7系统QQ语音功能无法使用的解决方法
-
Linux下VMware workstation的3种使用技巧
-
Photoshop使用3D工具制作非常有立体感的情人节海报
-
微信小程序 image组件binderror使用例子与js中的onerror区别
-
python 处理telnet返回的More,以及get想要的那个参数方法