2

使用 Pythonlogging库时,标准方法就是写一些这样的消息:

logging.info("All right")

但有时需要显示某些(长)任务的结果状态(在消息的主要部分输出后一段时间)。例如:

Some long computing...    [done]

或者

Some long computing...    [fail]

我怎么解决这个问题?

全部的:

好的。这是可能的,但仅限于下一行。对于同一行中的输出成功消息,您必须使用其他工具(可能是自定义),而不是loggingPython 库。

4

4 回答 4

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 中记录关键事件,您也可以在此函数中插入日志条目。即使您从单独的模块中导入此函数,您仍然可以引用相同的日志文件。

于 2013-05-02T14:47:56.250 回答
2

日志记录并不意味着用作进度 UI ...无论是否配置了日志记录,甚至当详细程度设置为最小值时,您的程序都应该以相同的方式工作。如果你想在控制台打印一些东西,使用print而不是记录。

于 2013-05-03T00:21:24.217 回答
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)
于 2013-05-02T13:51:53.170 回答
1

显而易见的解决方案是仅在您知道您的过程是否成功后才记录该行。尽管您想为用户提供一些输出以表明您的计算过程正在运行,但我接受了您的问题。

据我所知,使用 python 日志记录模块不可能做你想做的事,因为它本质上是面向行的。想象一下,您将把它发送到系统日志服务器,服务器如何理解这两条文本消息属于一起?此外,服务器需要保持状态,这通常是我们不想要的。

要么放弃日志模块,优先使用简单的打印语句,要么在计算完成后记录。

print "Some long computation...",
res = compute()
print "res"
于 2013-05-02T13:55:27.780 回答