【问题标题】:How to use python logging for a single package如何对单个包使用 python 日志记录
【发布时间】:2019-06-10 19:01:58
【问题描述】:

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

假设我有 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 或类似的东西,但感觉应该有更好的方法。

【问题讨论】:

    标签: python logging python-logging


    【解决方案1】:

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

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

    【讨论】:

    • 该死的你是对的。我以为我试过了,但没有用,但我第一次肯定搞砸了。也许我之前导入其他东西后初始化了日志记录?不知道是什么......无论如何这对我有用。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-30
    • 2016-09-05
    • 2020-01-03
    • 1970-01-01
    • 2021-09-27
    相关资源
    最近更新 更多