как войти func_name и имя файла - PullRequest
0 голосов
/ 19 марта 2019

Я упаковал класс Logger.

class Logger:
    def __init__(self, logfile):
        self.log_file = logfile

    def debug(self, message):
        logging.basicConfig(level=logging.DEBUG,
                            format='%(asctime)-15s %(levelname)s %(module)s %(funcName)s %(lineno)d %(message)s',
                            datefmt='%a, %d %b %Y %H:%M:%S',
                            filename=self.log_file,
                            filemode='w')
        logging.debug(message)

Затем я создаю экземпляр logger в основной функции. Затем я использовал этот регистратор в другом файле класса file1.

  def is_path_valid(self, dc_path):
      self.logger.debug('Entering with parameter dc_path: %s' %(dc_path))

Но этот журнал записывается в файл журнала: «Вт, 19 марта 2019 г. 05:41:15 DEBUG logger debug 14 Вход с параметром dc_path: / Диски». То, что я ожидал, это «вторник, 19 марта 2019 г. 05:41:15 DEBUG file1 is_path_valid #line_number Ввод с параметром dc_path: / disks»

Как мне поступить?

Ответы [ 3 ]

0 голосов
/ 19 марта 2019

Согласно протоколирование официального модуля Python в разделе Атрибуты LogRecord и для получения ожидаемого вывода журнала:

Вт, 19 марта 2019 г., 05:41:15 DEBUG file1 is_path_valid #line_number Ввод с параметром dc_path: / Диски

Ваши атрибуты записи журнала формата должны выглядеть следующим образом:

'%(asctime)-15s %(levelname)s %(module)s %(filename)s %(lineno)d %(message)s'

Обратите внимание на изменение с funcName на filename, потому что вы ищете имя файла, а также вы получите: Имя файла часть пути.

0 голосов
/ 20 марта 2019

Исправили эту проблему и не нужно писать собственный класс логгера.

0 голосов
/ 19 марта 2019

В конечном итоге вы можете использовать модуль traceback :

import traceback

def your_method(param):
    print(traceback.format_stack())  # the stacktrace formatted
    print(traceback.extract_stack())  # the stacktrace as a list, you could only get the last item

your_method(1)

Этого можно добиться, преобразовав метод debug () в нечто вроде этого:

def debug(self, message):
    logging.debug('%s - %s', traceback.extract_stack()[-1], message)

NB: вам не нужно вызывать метод basicConfig каждый раз, когда вы вызываете метод debug (), просто вызывайте его, когда ваш регистратор запущен;См. Больше о хороших методах ведения журнала там: https://realpython.com/python-logging/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...