Python库默认NullHandler在单元测试时导致错误

Python库默认NullHandler在单元测试时导致错误,python,python-3.x,unit-testing,logging,Python,Python 3.x,Unit Testing,Logging,我正在尝试为我正在编写的api库设置默认记录器。Python文档说明在库中设置NullHandler,然后让使用库的开发人员确定应该如何处理日志记录 请注意,强烈建议不要将NullHandler以外的任何处理程序添加到库的记录器中。这是因为处理程序的配置是使用库的应用程序开发人员的特权。应用程序开发人员知道他们的目标受众以及什么处理程序最适合他们的应用程序:如果您“在后台”添加处理程序,您很可能会干扰他们执行单元测试和交付符合其要求的日志的能力 因此,对于myapi.py这样的模块,我可能有:

我正在尝试为我正在编写的api库设置默认记录器。Python文档说明在库中设置NullHandler,然后让使用库的开发人员确定应该如何处理日志记录

请注意,强烈建议不要将NullHandler以外的任何处理程序添加到库的记录器中。这是因为处理程序的配置是使用库的应用程序开发人员的特权。应用程序开发人员知道他们的目标受众以及什么处理程序最适合他们的应用程序:如果您“在后台”添加处理程序,您很可能会干扰他们执行单元测试和交付符合其要求的日志的能力

因此,对于myapi.py这样的模块,我可能有:

log = logging.getLogger(__name__)
log.addHandler(logging.NullHandler)

class MyApi: ...
然后在单元测试文件中,我将设置实际的日志处理程序

import logging
log = logging.getLogger('myapi')
log.handlers = []
log.addHandler(logging.StreamHandler(sys.stdout))
log.setLevel(logging.DEBUG)

class MyApiTests(unittest.TestCase): ...
我遇到的问题是,在运行单元测试时,NullHandler会导致出现错误消息

  File "/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/logging/__init__.py", line 1590, in callHandlers
  if record.levelno >= hdlr.level:
  AttributeError: type object 'NullHandler' has no attribute 'level'
我试过几种方法来消除这个错误。首先,我试图删除现有的处理程序;log.handlers=[]。这似乎没有任何改变。我还尝试设置日志级别;log.setLevel(logging.DEBUG)。我仍然得到错误


我一定错过了什么。有人能解释一下如何删除NullHandler或防止出现错误消息吗?

这是因为您正在将类而不是实例添加到Handler列表中

log.addHandler(logging.NullHandler)
log.addHandler(logging.NullHandler())
应该是

log.addHandler(logging.NullHandler())