print
命令用于输出对程序运行至关重要的信息。而 logging
则用于输出对程序运行有帮助但不影响程序可用性的信息,如错误信息、进度等。
基本日志教程 中讨论了何时使用 logging
以及其他机制。
还有一件需要考虑的事情是,如果您拥有需要高速运行的代码。或者,如果您正在打印某些内容,并且在极少数情况下格式可能会发生变化,例如如通信中断或出现错误等。
请考虑以下2个选项:
msg = "Parameters are: %.3f, %.3f, %.3f, %.3f, %.3f, %.3f, %.3f, %.3f"%(p[0],p[1],p[2],p[3],p[4],p[5],p[6],p[7])
logger.debug(msg)
或者
if VERBOSE:
msg = "Parameters are: %.3f, %.3f, %.3f, %.3f, %.3f, %.3f, %.3f, %.3f"%(p[0],p[1],p[2],p[3],p[4],p[5],p[6],p[7])
print msg
在第一种情况下,即使日志级别不是DEBUG,字符串格式化仍然会被执行,这将影响整体性能。而在第二种情况下,如果VERBOSE为False,则什么也不会发生。
此外,我曾经遇到过由于调试消息的字符串格式化而生成异常的问题。以上面的代码为例,如果“p”只有6个值的情况很少出现,您将会得到一个索引错误。或者如果其中一个p值为“None”,则会出现异常。但在第二种情况下,如果VERBOSE为False,则您永远不会看到由调试代码引起的崩溃。
因此,日志记录非常方便,但我倾向于仅在需要将消息作为永久代码功能时使用它。如果我需要放置一个临时消息来帮助调试一次性问题,我通常会使用print语句。
并且作为一般规则,最终用户应该看到的内容应该是“print”。
logging
可能会完全替代您的 print()
调用。在某些情况下,例如开发库或使用多个线程时,日志记录是更好的选择。
没有硬性规定。个人倾向于不混合使用日志记录和打印,并且只使用其中之一。