【发布时间】:2016-08-05 15:49:23
【问题描述】:
注意:此问题基于 Python 通过日志记录发出错误消息的假设。答案表明假设是错误的。
我正在开发一个程序,它不是从命令行启动,而是由守护进程启动。 Stderr 被重定向到空设备。
通常它会将消息记录到文件中,但是当某些错误阻止正常启动时,没有要读取的错误消息,因为它被发送到空设备。
为了在这种情况下节省一点调试时间,我尝试了一个小“启动器”,它首先将文件处理程序添加到根记录器。
我已经在realprog 模块中使用故意的语法错误对其进行了测试。它将两个“开始”消息记录到文件中,但语法错误的回溯仍然打印到 stderr。你能帮忙吗?
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
logger.addHandler(logging.FileHandler('test.log'))
logger.info("logging start")
def real_start():
# assume e.g. a syntax error in the realprog
import realprog
realprog.main()
if __name__ == '__main__':
logger.info("program start")
real_start()
【问题讨论】:
-
你能发布你的错误信息吗?
-
@HaifengZhang:
import realprog失败,语法错误如预期。没有其他消息。它是带有标准回溯的标准消息。消息本身没有任何问题,只是它被打印出来,而不是记录到文件中。你需要这个错误信息吗?