python - 如何对单个包使用 python 日志记录
问题描述
我正在开发一个包并在开发过程中使用日志记录来打印我的调试/信息。有没有一种好方法可以只为我的包启用日志记录而不为根目录下的所有内容启用它?
假设我有 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 或类似的东西,但感觉应该有更好的方法。
解决方案
您已经为您的包定义了一个唯一的记录器。你只需要配置它。由于包记录器继承自根记录器,因此您指定的任何内容也basicConfig
适用于它。您只需要在调用basicConfig
.
import logging
logging.basicConfig(level=logging.WARNING)
logging.getLogger('my.package').setLevel(logging.DEBUG)
推荐阅读
- python - Changed/stored pixel value won't brighten output image (using PIL import with grok learning python hw)?
- html - 带有溢出和引导导航栏的 Flex 在 Firefox/Chrome/Safari 中的表现不同
- python - Handling exceptions assert to NumPy testing in Python
- c++ - 在 C++ 中不使用向量解析 csv 文件
- mod-security - 如何配置 modsecurity 以记录大于配置的 SecResponseBodyLimit 的响应?
- cumulocity - How to achieve role hierarchy in Cumulocity
- python - 为什么 scipy.linalg.lu() 不返回与 scipy.sparse.linalg.splu() 相同的 L 矩阵?
- python - 使用 python beautifulsoup 抓取网页但没有获得价值
- ruby - 使用 Jenkins 运行 .rb 文件
- python - 获取用于在 python 中生成问题的句子