使用Python logging
库时,标准方法就是写一些这样的消息:
logging.info("All right")
但有时需要显示一些(长)任务的结果状态(在输出消息的主要部分之后一段时间)。例如:
Some long computing... [done]
或
Some long computing... [fail]
我该如何解决这个问题?
确定。这是可能的,但仅限于下一行。对于同一行中的输出成功消息,您必须使用其他工具(可能是自定义),而不是logging
Python库。
答案 0 :(得分:3)
听起来这可能会帮助你。
import logging
logging.basicConfig(format = "%(asctime)s - %(levelname)s - %(message)s",
level = logging.DEBUG)
logging.info("Long Task is starting")
try:
StartLongTaskFunction()
logging.info("Long task finished")
except:
logging.exception("Long task failed")
请注意,logging.exception()与logging.error()略有不同。为logging.exception()添加日志条目后,还包括整个Python错误消息。
如果要在StartLongTaskFunction中记录关键事件,也可以在此函数中插入日志条目。即使从单独的模块导入此函数,您仍然可以引用相同的日志文件。
答案 1 :(得分:1)
你可以试试如下吗?实际上我无法理解你的确切问题。
#!/usr/bin/python
status_success = "Done"
status_fail = "Fail"
import logging
logging.basicConfig(format='%(levelname)s:%(message)s', level=logging.DEBUG)
"""
Do some computation here and based on that result display the below message
"""
logging.info('Some long computation [%s]' % status_success)
或者
logging.info('Some long computation [%s]' % status_fail)
答案 2 :(得分:1)
显而易见的解决方案是在您知道您的流程是否成功后才记录该行。我接受你的问题,虽然你想为用户提供一些输出,以使你的计算过程显而易见。
据我所知,使用python日志记录模块是不可能做到你想要的,因为它本身就是面向自然界的。想象一下,您将这个发送到系统日志服务器,服务器将如何理解这两个文本消息属于一起?此外,服务器还需要保持状态,这通常是我们不想要的。
放弃记录模块而不是简单的打印语句,或者在计算完成后记录日志。
print "Some long computation...",
res = compute()
print "res"
答案 3 :(得分:1)
日志记录并不意味着用作进度UI ...无论是否配置了日志记录,您的程序都应该以相同的方式工作,即使将详细程度设置为最小值也是如此。如果要将某些内容打印到控制台,请使用print
而不是记录。