gpt4 book ai didi

python - 为什么 python 的日志记录接口(interface)与 print 的不同?

转载 作者:行者123 更新时间:2023-12-01 03:19:09 25 4
gpt4 key购买 nike

我喜欢 Python 的 print 函数的界面:

print("abc %d %s" % (12, "sdf"), 78, "some other string")

但是,当我使用默认的 logging 包进行日志记录时,界面有所不同:

logger.info("abc %d %s 78 some other string", 12, "sdf")

它们不一致有什么原因吗?是否可以让 logging logger 表现得像 print 一样?

最佳答案

TL;DR:让记录器格式化消息比您自己格式化消息有一些优点。对于print则没有这样的优势,所以最好有更方便的接口(interface)。

您首先看到的是函数签名不同。 print 函数接受任意多个位置参数,并将它们全部打印出来。在您的示例中,您向 print 发送了 3 个位置参数,它们由空格连接。

print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)

记录器函数接受消息的一个位置参数,以及在该消息中替换的任意多个模板变量,例如:

logger.info(msg, *args, **kwargs)

Is there any reason they are inconsistent?

是的。这里的 print 只是一个函数,与任何其他函数一样,在调用函数参数之前对参数进行完全评估。因此,模板 "abc %d %s"% (12, "sdf") 首先发生。

另一方面,使用记录器,最好让记录器进行模板化/格式化。造成这种情况的原因有几个,但也许最有说服力的一个是日志聚合服务可以轻松地将同类错误分组在一起。来自同一模板、使用不同参数触发的这些错误可以被视为一个整体,而不是生成数千个单独的错误。

关于python - 为什么 python 的日志记录接口(interface)与 print 的不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42118802/

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