如何使用Python logging来记录单个包的日志

6
我正在开发一个包,并在开发过程中使用logging模块来记录调试/信息日志。有没有一种好的方法只为我的包启用日志记录,而不是为根目录下的所有内容都启用日志记录?
比如说,我有一个名为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个回答

4
您已经为您的包定义了一个唯一的记录器。您只需要配置它即可。由于包记录器继承自根记录器,因此您使用basicConfig指定的任何内容也适用于它。在调用basicConfig后,您只需要执行特定于记录器的覆盖即可。
import logging
logging.basicConfig(level=logging.WARNING)
logging.getLogger('my.package').setLevel(logging.DEBUG)

你说得对。我原以为我已经尝试过这个方法,但它并没有起作用,但我第一次可能搞错了什么。也许我在导入其他内容之前初始化了日志记录?不确定...无论如何,这对我有用。谢谢! - Andrew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接