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

How to use python logging for a single package

我正在开发一个包,并在开发过程中使用日志记录 debug/info 打印。有没有一种好方法可以只为我的包启用日志记录而不为根以下的所有内容启用它?

假设我有 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 的任何 logger.debug() 调用和我不想看到的 other_package。如何设置我只能看到来自 my_package 的日志记录?

我可以做一些棘手的事情,比如硬编码禁用彼此的包 logging.propagate 或类似的东西,但感觉应该有更好的方法。

您已经为您的包定义了一个唯一的记录器。你只需要配置它。由于包记录器继承自根记录器,因此您使用 basicConfig 指定的任何内容也适用于它。您只需要在调用 basicConfig.

后执行 logger-specific 覆盖
import logging
logging.basicConfig(level=logging.WARNING)
logging.getLogger('my.package').setLevel(logging.DEBUG)