2013-08-20 1 views
1

Я хочу создать журнал ошибок, которые возникают при запуске скрипта python на малине Pi (встроенный модуль, который использует rasbian, который является своего рода Linux), чтобы я мог проверять на более позднем этапе, чтобы увидеть, где возникают проблемы. Я хочу добавлять ошибки каждый раз, когда запускается сценарий, записывать дату и текст ошибки (например, как распечатывается мной в пределах исключения или как сгенерировано где-то внутри самого python)Стандартные схемы для ошибок регистрации в скрипте python

Я думаю, это должно быть обычным делом для так что, прежде чем я пойду написать свою собственную, мне было интересно, есть ли стандартный способ делать такие вещи.

Я нашел несколько таких предложений, но это не печатает дату. Кроме того, мне было интересно, если я должен передать fsock к функциям в качестве аргумента или это нормально использовать глобальный ....

fsock = open('my_app_error.log', 'a') 
sys.stderr = fsock 

fsock.write("URLError") 
+6

есть замечательный модуль, называемый протоколированием: http://docs.python.org/2/howto/logging.html#logging-basic-tutorial – vroomfondel

+0

При возникновении риска запуска sh * tst * rm, я бы сказал, что мы глобальный для чего-то вроде процедуры регистрации ошибок не выходит за рамки. Либо это, либо написать обычную log_err(), которая хранится в самом указателе файла. – Jiminion

+0

Что сказали рогао !!! – Jiminion

ответ

2

Вы могли бы сделать что-то вроде

def logError(message): 
    import inspect 
    import logging 
    import traceback 

    cframe = inspect.currentframe() 
    called_from = inspect.getframeinfo(cframe.f_back).function 
    try: 
     stack_trace = traceback.format_exc() 
    except AttributeError: 
     stack_trace = 'Unable to retrieve stack_trace.' 

    error = '{},{},{},{}\n'.format(message, user, called_from,stack_trace.replace('\n','|')) 
    logging.basicConfig(format='%(asctime)s%(message)s', datefmt='%m/%d/%Y %I:%M:%S %p',filename='log.csv') 
    logging.warning(error) 

inspect, logging и traceback модули полезны для регистрации ошибок