如何对单个软件包使用python日志记录

时间:2019-06-10 19:01:58

标签: python logging python-logging

我正在开发一个软件包,并在开发过程中使用日志记录进行调试/信息打印。有没有一种好的方法可以仅对我的软件包启用日志记录,而不对root以下的所有内容都启用日志记录?

说我有my_package:

# Some package from elsewhere that I need but don't want to see logging from
import other_package  

import logging
from logging import NullHandler
logger = logging.getLogger(__name__)
logger.addHandler(NullHandler())

def my_func():
    logger.debug("a message")

和使用该软件包的主要功能:

import my_package

# Some package from elsewhere that I need but don't want to see logging from
import another_package

import logging
logging.basicConfig(level=logging.DEBUG)

my_package.my_func()

此设置将使我能够看到my_func()对logger.debug()的调用,但它还会显示来自other_package和another_package的所有logger.debug()调用,这些我不想看到。我该如何设置只能看到my_package日志记录的内容?

我可以做一些骇人的事情,例如硬编码来禁用彼此的包的logging.propagate或类似功能,但是感觉应该有更好的方法。

1 个答案:

答案 0 :(得分:1)

您已经为包裹定义了唯一的记录器。您只需要配置它。由于包记录器是从根记录器继承的,因此您用basicConfig指定的任何内容也都适用。调用basicConfig后,只需执行特定于记录程序的替代。

import logging
logging.basicConfig(level=logging.WARNING)
logging.getLogger('my.package').setLevel(logging.DEBUG)