在Python docs on logging中,它表示“ Display [ing]控制台输出以用于命令行脚本或程序的常规使用”的“ 最适合任务的工具” < / em>”将使用print()
函数。
我不明白为什么。背后的原因是什么?
我想在项目中系统地使用日志记录,这是一个命令行工具,向控制台提供一些标准输出。通常由print()
生成的所有标准输出也应转到日志文件。
对于我的root记录器,我既使用StreamHandler进行控制台输出,也使用FileHandler生成日志文件。如果要遵循建议,则必须使用相同的日志记录语句复制每个打印语句,或者按照this question中的建议找到一种方法来重定向print()
的输出。那里接受的答案是通过编写print = log.info
来代替打印功能,这实际上等于将日志记录为普通控制台输出。
答案 0 :(得分:2)
与简单打印相比,日志记录更加耗费资源和时间。如果您只想获取控制台输出,请使用print
。但是,您还想将所有输出记录到文件中,这就是为什么要使用logging
的原因。
如果要同时打印到控制台和保存到日志,则可以在每次要执行的操作中都放入这两个命令,可以创建一个自定义函数来分别执行这两项操作,或者创建StreamHandler
和像您提到的FileHandler
会将日志发送到stdout。您可以按照this answer为例。
答案 1 :(得分:1)
如果要记录某些内容,则要记录一些内容。如果要在stdout上输出数据,则要打印一些内容。有时一个人伪装成另一个,但它们本质上是不同的。
如果创建的命令行应用程序从stdin读取并输出到stdout,则表示正在打印。如果您正在编写有关正在进行的某些过程的信息,警告或错误更新,则表示正在登录。
我想在项目中系统地使用日志记录
然后系统地记录日志,而不是系统地打印。
通常由print()生成的所有标准输出也应转到日志文件。
那么这些不应该是打印呼叫,而应该是日志呼叫。
我认为您链接的问题包含错误的建议。您应该使用常规的日志记录调用并设置记录器,以使其既输出到控制台,又输出到日志文件。
答案 2 :(得分:0)
我真的觉得您对文档中的建议读得太多了。或者,换一种方式来看,我认为您对Python社区给予了太多赞誉,因为他们不是需要被告知他们不应该做愚蠢的事情。
当他们这样说时:
您要执行的任务:显示控制台输出,以供命令行脚本或程序的常规使用
完成任务的最佳工具:print()
他们的意思是 ,不要做这样的蠢事:
grep
的Python实现,该实现使用logging.log()
显示匹配的行git log
,将提交历史记录显示为一系列log()
消息units
转换结果的方式重新实现log()
因为,尽管有这种友好的劝阻,人们 绝对会! 甚至还有拥有。只是……希望比以前少得多。
如果程序的输出确实是 记录,而不是程序的结果运行,则请务必使用{{1 }}!根据这些建议,您不是与他们交谈的人之一。