Python日志记录完成/失败消息
当使用PythonPython日志记录完成/失败消息,python,logging,Python,Logging,当使用Python日志记录库时,标准方法就是编写如下消息: logging.info("All right") 但有时需要显示某些(长)任务的结果状态(在输出消息的主要部分后一段时间)。例如: Some long computing... [done] 或 我怎样才能解决这个问题 总数: 嗯。这是可能的,但只有在下一行。要在同一行中输出成功消息,您必须使用其他工具(可能是自定义工具),而不是日志记录Python库。您可以尝试以下方法吗?事实上,我不能完全理解你的问题 #!/usr/bi
日志记录
库时,标准方法就是编写如下消息:
logging.info("All right")
但有时需要显示某些(长)任务的结果状态(在输出消息的主要部分后一段时间)。例如:
Some long computing... [done]
或
我怎样才能解决这个问题
总数:
嗯。这是可能的,但只有在下一行。要在同一行中输出成功消息,您必须使用其他工具(可能是自定义工具),而不是
日志记录Python库。您可以尝试以下方法吗?事实上,我不能完全理解你的问题
#!/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)
或
显而易见的解决方案是,只有在知道进程是否成功后才记录该行。不过,我认为您的问题是,您希望向用户提供一些输出,以表明您的计算过程正在工作
据我所知,使用python日志模块是不可能实现您想要的功能的,因为它本质上是面向行的。假设您将此消息发送到一个syslog服务器,服务器如何理解这两条文本消息属于同一个服务器?此外,服务器需要保持状态,这通常是我们不想要的
要么放弃日志模块而选择简单的打印语句,要么在计算完成后记录日志
print "Some long computation...",
res = compute()
print "res"
听起来这可能对你有所帮助
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错误消息
如果要在TaskFunction中记录关键事件,也可以在此函数中插入日志项。即使您从单独的模块导入此函数,您仍然可以引用相同的日志文件。日志记录并不打算用作进度UI。。。无论是否配置日志记录,甚至当详细度设置为最小值时,程序都应该以相同的方式工作。如果要将内容打印到控制台,请使用print
而不是日志。确定。我只是具体说明我的问题。问题是当您有一些长的计算,并且需要在显示消息的第一部分之前很久显示第二部分时,这是一个解决方案。但不太漂亮。我需要类似Debian bootlogd的输出。更好,但是在与基本消息相同的行中显示成功消息如何?您所说的“基本消息”和“成功消息”是什么意思?正如kll在下面指出的,在Python中登录是面向行的。如果要记录多个数据点,则需要将它们存储在脚本中的变量/对象中,并将它们全部输入到同一个日志条目中。本机不支持在日志记录中追溯更新以前输入的日志条目。谢谢。现在我明白了。
print "Some long computation...",
res = compute()
print "res"
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")