Ошибка журнала Python указывает на неправильную строку в функции - PullRequest
0 голосов
/ 20 марта 2019

Новичок здесь, оценит некоторую помощь.

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

def addition(a,b):

    logging.getLogger(__name__).info("LOG")
    start = time.time()

    try:
        print("the first number is \n" + str(a))
        print("and the second one is \n" + str(b))
        prin(a+b)

    except Exception as e:
        logging.getLogger("LOG").error('this is an error,'+ str(e))


    end = time.time()
    logging.getLogger("LOG").log(20,'Function 1 Completed, time_finished: '
                                     + str(end - start)
                                     + ' seconds, '
                                     + str(50))

addition(2,3)

Вывод, который я получаю:

the first number is

2

and the second one is 

3

2019-03-20 18:57:31,826 MAIN_LOGGER ERROR 0024 this is an error,name 'prin' is not defined

По сути, я хочу, чтобы в сообщении об ошибке журнала отображалась фактическая строка, в которой происходит ошибка, а не при вызове функции журнала.

Пожалуйста, помогите :)

Ответы [ 2 ]

1 голос
/ 20 марта 2019

Используйте exception, а не error при печати трассировки в журнал, чтобы получить полную трассировку.

except Exception as e:
    logging.getLogger("MAIN_LOGGER").exception('Could not perform translation')
0 голосов
/ 20 марта 2019

Вы можете использовать этот код, чтобы показать строку, где происходит ошибка:

print('Error on line {}'.format(sys.exc_info()[-1].tb_lineno), type(e).__name__, e)

Используя ваш пример, это будет выглядеть так:

import sys

def addition(a,b):
    try:
        print("the first number is \n" + str(a))
        print("and the second one is \n" + str(b))
        prin(a+b)

    except Exception as e:
        print('Error on line {}'.format(sys.exc_info()[-1].tb_lineno), type(e).__name__, e)   
...