【问题标题】:Python - How to disable logging from a module imported from the parent directory?Python - 如何禁用从父目录导入的模块的日志记录?
【发布时间】:2020-11-07 14:06:00
【问题描述】:

我有这样的文件结构:

util/
└── utilA.py
src/
└── sublevel
    └── moduleB.py

moduleB 中,我使用from util.utilA import * 从 util 中导入函数。

moduleB 内部,我想禁用util 中的logging.info(),但以下两行不起作用,如果我运行moduleB,我仍然会看到@987654328 中的函数生成的日志记录@:

logging.getLogger('util.utilA').propagate = False
logging.getLogger('util.utilA').setLevel(logging.ERROR)

我也尝试了logging.getLogger('util')logging.getLogger('utilA'),但这些都不起作用。

还有一点让我感到困惑的是,我对另一个模块 pdfminer 使用了相同的两行 (logging.getLogger('pdfminer')...),并且它成功地禁用了该模块的日志记录。它对我本地的utilA 不起作用。

有人可以帮忙吗?谢谢!

【问题讨论】:

  • utilA 使用什么记录器? (应该是logging.getLogger("something"))。日志记录不基于模块名称。这是一个常见的约定,但是一个模块可以创建一个它想要的任何名称的记录器。
  • @tdelaney utilA 正在使用 logging.info('Something happened')。将其更改为logger = logging.getLogger(__name__)logger.info('Something happened') 后,问题就解决了。非常感谢!

标签: python logging import module python-import


【解决方案1】:

日志记录基于您在获取记录器时使用的名称,而不是执行记录的模块的名称。特别是,logging.info() 使用根记录器。如果要调整给定模块的日志记录,请确保它没有使用根记录器并使用其 getLogger("somename") 记录器名称。

【讨论】:

    猜你喜欢
    • 2016-05-21
    • 1970-01-01
    • 2015-07-23
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    • 1970-01-01
    • 2015-02-25
    相关资源
    最近更新 更多