我正在开发一个软件包,并在开发过程中使用日志记录进行调试/信息打印。有没有一种好的方法可以仅对我的软件包启用日志记录,而不对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或类似功能,但是感觉应该有更好的方法。
答案 0 :(得分:1)
您已经为包裹定义了唯一的记录器。您只需要配置它。由于包记录器是从根记录器继承的,因此您用basicConfig
指定的任何内容也都适用。调用basicConfig
后,只需执行特定于记录程序的替代。
import logging
logging.basicConfig(level=logging.WARNING)
logging.getLogger('my.package').setLevel(logging.DEBUG)