2014-11-28 2 views
0

Я регистрирую все ошибки в файле, так как нет другого способа увидеть их правильно в моем случае, особенно в среде 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' 

Это две ошибки здесь (ну, такая же ошибка регистрируется дважды). Я хотел бы иметь, если отформатирован немного лучше (т. Е. Добавлена ​​новая строка между ошибками) и, если возможно, добавьте дату-время. Могу ли я это сделать, используя этот метод регистрации ошибок?

+0

Не могли бы вы предоставить более подробную информацию, чем * «У меня были проблемы» *? Вы читали [документацию/протоколы ведения журнала] (https://docs.python.org/2/library/logging.html)? Вы можете управлять форматированием с помощью объектов '' Formatter' (https://docs.python.org/2/library/logging.html#formatter-objects). – jonrsharpe

+0

Отредактировал вопрос, удалив, возможно, чрезмерную информацию. Надеюсь, теперь не нужно закрывать его? – Sejanus

+0

Теперь ответ просто * «нет» *; если вы просто перенаправляете 'stderr' в файл, вы получаете трассировку по умолчанию. Если вы хотите больше контролировать, куда идут ошибки и как выглядит, «logging» - это путь. – jonrsharpe

ответ

0

После небольшого чтения руководств Python кажется, что решение довольно простое - вместо прямого использования файла 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 

я мог бы хотеть, чтобы настроить его немного больше, но это достаточно хорошо уже ,

Смежные вопросы