Sam*_*dio 66 python printing logging
对于复杂项目中的简单调试,是否有理由使用python记录器而不是print?其他用例怎么样?是否有一个被接受的最佳用例(特别是当你只是在寻找标准输出时)?
我一直听说这是一个"最佳实践",但我无法弄清楚原因.
小智 75
日志包具有许多有用的功能:
打印没有这些.
此外,如果你的项目是由其他python工具导入的,那么你的软件包将东西打印到stdout是不好的做法,因为用户可能不知道打印消息的来源.通过日志记录,您的软件包的用户可以选择是否要从您的工具传播日志消息.
rid*_*rid 19
正确记录的最大优点之一是您可以根据需要对消息进行分类并打开或关闭它们.例如,为项目的某个部分打开调试级别消息可能很有用,但是为其他部分调低调整级别,以免被信息过载接管并轻松专注于您需要的任务日志记录.
此外,日志是可配置的.您可以轻松地过滤它们,将它们发送到文件,格式化它们,添加时间戳以及全球范围内可能需要的任何其他内容.打印报表不易管理.
打印语句是两个世界中最糟糕的,将在线调试器的负面影响与诊断仪器相结合.您必须修改程序,但不会从中获得更多有用的代码.
在线调试器允许您检查正在运行的程序的状态; 但真正的调试器的好处是你不必修改源代码; 调试会话之前和之后都没有; 您只需将程序加载到调试器中,告诉调试器您要查看的位置,并且您已完成设置.
检测应用程序可能需要预先做一些工作,以某种方式修改源代码,但生成的诊断输出可能具有大量细节,并且可以在非常特定的程度上打开或关闭.python日志记录模块不仅可以显示记录的消息,还可以显示调用它的文件和函数,如果有的话,还可以显示消息的实际发送时间,等等.比那更多的; 永远不要删除诊断仪器; 当程序完成并且在生产中它就像它被添加的那一天一样有效和有用; 但它可以将它的输出卡在日志文件中,它不会惹恼任何人,或者可以调低日志级别以保留除最紧急消息之外的所有消息.
预测调试器的需要或使用并不比在测试时使用ipython更难,并且熟悉它用来控制内置pdb调试器的命令.
当你发现自己认为print语句可能比使用pdb更容易时(通常是这样),你会发现使用记录器会比你使用和以后删除print语句更容易处理你的程序状态. .
我的编辑器配置为将print语句突出显示为语法错误,并将语句记录为注释,因为这是关于我如何看待它们的.
简而言之,使用日志库的优势确实超过print以下原因:
具体来说,按严重性级别对日志事件进行分段是筛选哪些日志消息在给定时间可能最相关的好方法。日志事件\xe2\x80\x99s 严重性级别还可以指示您在看到特定消息时应该有多担心。例如,将日志记录类型分为debug、info、warning、critical和error。当您\xe2\x80\x99 试图了解应用程序出了什么问题时,时间就是一切。您想知道以下问题的答案:
\n此外,通过行号和文件名或方法名,甚至在哪个线程中,都可以很容易地看到日志发生在哪里。
\n这是一个名为loguru的 Python 功能日志库。
\n