python - 为什么 Python 文档建议不要对正常的控制台输出使用日志记录?

标签 python logging console-application

在 Python 中 docs on logging它说“完成任务的最佳工具“显示[ing]普通使用命令行脚本或程序的控制台输出”是使用打印()功能。

我不明白为什么。这背后的原因是什么?

我想在我的项目中系统地使用日志记录,这是一个命令行工具,带有一些标准输出到控制台。 print() 通常生成的所有标准输出也应该进入日志文件。

对于我的根记录器,我使用 StreamHandler 进行控制台输出,并使用 FileHandler 生成日志文件。如果我想遵循建议,我必须要么用相同的日志记录语句复制每个打印语句,要么找到一种方法来重定向 print() 的输出,如 this question 中所建议的那样.接受的答案是通过编写 print = log.info 来替换 print 函数,毕竟这实际上相当于对普通控制台输出使用日志记录。

最佳答案

如果你想记录一些东西,你就想记录一些东西。如果你想在 stdout 上输出数据,你想要打印一些东西。有时一个伪装成另一个,但它们根本不同。

如果您正在创建一个从标准输入读取并输出到标准输出的命令行应用程序,那么您就是在打印。如果您正在编写有关某些正在进行的进程的信息、警告或错误更新,那么您就是在记录日志。

I want to use logging systematically in my project

然后系统地记录,而不是系统地打印。

All standard output normally generated by print() should also go to the log file.

那么那些不应该是打印调用,而是记录调用。

在我看来,您链接的问题包含不好的建议。您应该使用常规日志记录调用并设置您的记录器,使其同时输出到控制台和日志文件。

关于python - 为什么 Python 文档建议不要对正常的控制台输出使用日志记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58511589/

相关文章:

c# - 如何读取特定行的文件

python - 如何使用 python 获取 x,y 坐标?

logging - C#中的事件记录器是否需要管理员权限才能将日志写入Windows Event Viewer?

javascript - 如何为 JavaScript 箭头函数创建记录器?

c# - C# Windows 控制台应用程序如何判断它是否以交互方式运行

c# - 为什么零字节的 app.config 文件会导致一个非常奇怪的错误?

python - 如何将文件读入 Python 中的列表?

python - 我如何从 Python 调用 Vim?

python - 定期抓取雅虎财经

java - Spring on Glassfish - 记录 Hibernate 参数?