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

And*_*rew 6 python logging python-logging

我正在开发一个包并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")
Run Code Online (Sandbox Code Playgroud)

以及使用该包的主要函数:

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()
Run Code Online (Sandbox Code Playgroud)

此设置将让我看到my_func()对 的调用logger.debug(),但它也会显示logger.debug()来自 other_package 和 another_package 的任何调用,这是我不想看到的。如何设置只能看到 my_package 中的日志记录?

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

che*_*ner 4

您已经为您的包定义了一个唯一的记录器。您只需要进行配置即可。由于包记录器继承自根记录器,因此您指定的任何内容basicConfig也适用于它。您只需要在调用后执行特定于记录器的覆盖basicConfig

import logging
logging.basicConfig(level=logging.WARNING)
logging.getLogger('my.package').setLevel(logging.DEBUG)
Run Code Online (Sandbox Code Playgroud)