python - 为模块创建新记录器是否仍使用根记录器名称?
问题描述
我正在看这篇文章:https ://docs.python.org/3.7/howto/logging.html#logging-basic-tutorial
这段落:
记录器层次结构的根称为根记录器。那是函数 debug()、info()、warning()、error() 和 critical() 使用的记录器,它们只是调用根记录器的同名方法。函数和方法具有相同的签名。根记录器的名称在记录的输出中打印为“root”。
我很困惑,因为一旦您使用logger = logging.getLogger(__name__)
和使用 logger.info/debug/etc. 创建了一个记录器,应该打印模块的名称而不是 root。为什么段落说:“......它只是调用根记录器的同名方法”
解决方案
措辞很重要。
[...] 那是函数debug()、info()、warning()、error() 和 critical() 使用的记录器,它们只是调用根记录器的同名方法。[...]
该段落指的是模块级实用程序函数debug()
、info()
、warning()
和 。实际上,所有这些都在根记录器上运行,例如:error()
critical()
def debug(msg, *args, **kwargs):
"""
Log a message with severity 'DEBUG' on the root logger. If the logger has
no handlers, call basicConfig() to add a console handler with a pre-defined
format.
"""
if len(root.handlers) == 0:
basicConfig()
root.debug(msg, *args, **kwargs)
这些模块级函数可以在文档中找到。
当然,当通过创建自己的记录器logging.getLogger(__name__)
并在该实例上调用相应的方法时,您在记录器上操作,而不是根(主要是,仍然存在传播,除非明确禁用)。
编辑:我刚刚意识到,乔治对您稍早的问题的出色、深入的答复
已经回答了这个问题以及您之前的问题。我强烈建议您仔细阅读。
推荐阅读
- android - Android 谷歌地图 API 密钥“REQUEST_DENIED”
- powershell - 用于计划任务的 Powershell
- python - 我想从 txt 文件中打印唯一密码和 19 个随机密码。我怎样才能使这项工作?
- autodesk - Autodesk 核对表的签名
- .net-core - .NET Core API - 方法在本地出现在 Swagger UI 中,但不在部署版本中
- c# - 物理忽略以避免碰撞
- database - 在 MongoDB 中分组并添加到 Group
- php - phpoffice 或任何可以向 word 文档添加注释的 phpWord 库?
- arrays - 如何在令牌之间检索值
- python - 时钟和计数器在同一个窗口