gpt4 book ai didi

python - 如何使用默认情况下在 Python 中打印的包中的日志记录?

转载 作者:行者123 更新时间:2023-12-01 09:34:33 24 4
gpt4 key购买 nike

我想将包的 print 语句更改为使用logging。所以我会编写我的脚本,例如

import logging
logger = logging.getLogger(__name__)

def func():
logger.info("Calling func")

推荐的方式是什么?

但是,许多用户没有初始化日志记录,因此不会看到输出。

是否有推荐的方法,以便未初始化日志记录的用户可以看到 info 输出,而那些显式设置日志记录的用户不会被我的包篡改其特定配置?

最佳答案

作为一般经验法则,模块永远不应该直接配置日志记录(并对共享 STDOUT/STDERR 进行其他未经请求的更改),因为这是模块用户的领域。如果用户想要输出,他应该显式启用日志记录,然后,只有这样,您的模块才应该被允许记录

如果您提供一个接口(interface)来在模块中显式启用日志记录,以便用户只对从自己的代码进行日志记录感兴趣,则无需显式更改级别/禁用内部组件的记录器,即可获得奖励点。

当然,要在 STDOUT/STDERR 处理程序尚未初始化时继续使用 logging,您可以使用 logging.NullHandler,因此您在模块中所需要做的就是:

import logging

logger = logging.getLogger(__name__)
logger.addHandler(logging.NullHandler()) # initialize your logger with a NullHandler


def func():
logger.info("Calling func")

func() # (((crickets)))

现在您可以在整个模块中继续使用您的记录器,直到用户初始化记录为止,您的模块不会侵入输出,例如:

import your_module

your_module.func() # (((crickets)))

import logging

logging.root.setLevel(logging.INFO)
logging.info("Initialized!") # INFO:root:Initialized!

your_module.func() # INFO:your_module:Calling func

当然,实际的日志记录格式、级别和其他设置也应该在用户的范围内,因此如果他们更改根日志处理程序的格式,它也应该由您的模块记录器继承。

关于python - 如何使用默认情况下在 Python 中打印的包中的日志记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49651397/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com