Python 2.7 格式错误报告

Python 2.7 格式错误报告,python-2.7,Python 2.7,我将所有错误记录到一个文件中,因为在我的情况下,没有其他方法可以正确地查看它们,特别是在prod环境中。像这样: sys.stderr = open('py/log/my_logfile.error.log', 'a') 我得到了类似的结果: Traceback (most recent call last): File "my_awesome_file.py", line 50, in <module> revision = session.Query() Attri

我将所有错误记录到一个文件中,因为在我的情况下,没有其他方法可以正确地查看它们,特别是在prod环境中。像这样:

sys.stderr = open('py/log/my_logfile.error.log', 'a')
我得到了类似的结果:

Traceback (most recent call last):
  File "my_awesome_file.py", line 50, in <module>
    revision = session.Query()
AttributeError: 'Awesome' object has no attribute 'SomeSortOfAttribute'
Traceback (most recent call last):
  File "my_awesome_file.py", line 50, in <module>
    revision = session.Query()
AttributeError: 'Awesome' object has no attribute 'SomeSortOfAttribute'

这里有两个错误,同样的错误记录了两次。我想有一个更好的如果格式,即额外的换行之间的错误,并添加一个日期时间,如果可能的话。我可以使用这种错误记录方法吗

在阅读了一点Python手册之后,解决方案似乎相当简单——我只需要使用自定义流,而不是直接使用file open作为stderr的流。很明显,这让我很困惑,为什么我没有马上想到。嗯,毕竟是星期五晚上

一个非常基本的版本是:

import time

class LogStream(object):

    def write(self, text):
        f = open('py/log/my.custom.error.log', 'a')
        f.write(time.strftime("%H:%M:%S ") + text + "\r\n")
        f.close()
然后

sys.stderr = LogStream()
结果:

12:03:05 Traceback (most recent call last):

12:03:05   File "py/stuff.py", line 38, in <module>

12:03:05     
12:03:05 raise Exception("just some test")

12:03:05 Exception
12:03:05 : 
12:03:05 just some test
12:03:05 

我可能想对它进行更多的定制,但它已经足够好了。

你能提供比我遇到的麻烦更多的细节吗?你读过吗?您可以通过编辑问题来控制格式。删除可能过多的信息。我希望现在没有必要关闭它?现在答案是否定的;如果您只是将stderr重定向到文件,则会得到默认的回溯。如果您想更多地控制错误的位置和外观,那么日志记录就是一种方法。@jonrsharpe很酷,谢谢,我很高兴您不再关闭它,这样我可以及时得到正确的答案。就像他们说的,如果你帮不上忙,至少不要受伤。谢谢!如果你帮不上忙,至少不要受伤?获得一些观点——这是一次势均力敌的投票,在一个糟糕的问题上,你现在已经改进了;这就是应该发生的事情。我不知道你期望得到什么正确的答案:不,如果你使用这种错误记录方法,你就无法控制格式。