Страницы

Поиск по вопросам

понедельник, 8 июля 2019 г.

Best Practise - python logger.debug различные yровни логгирования debug

Какие существуют рекомендации по написанию логгирования для режима debug в коде? Как правильно реализовать различные уровни (от 1 до 5 по уровню деталиазации) логгирования для указного режима? Например при включении debug_level <= 3 выводить сообщения в файл логгирования, а если debug_level > 3 тогда выводить debug информацию только на консоль.


Ответ

Привожу простой пример логгирования в консоль и файл с кастомный форматом логов:
def get_logger(name, file='log.txt', encoding='utf8'): import sys import logging
log = logging.getLogger(name) log.setLevel(logging.DEBUG)
formatter = logging.Formatter('[%(asctime)s] %(filename)s[LINE:%(lineno)d] %(levelname)-8s %(message)s')
fh = logging.FileHandler(file, encoding=encoding) fh.setLevel(logging.DEBUG)
ch = logging.StreamHandler(stream=sys.stdout) ch.setLevel(logging.DEBUG)
fh.setFormatter(formatter) ch.setFormatter(formatter)
log.addHandler(fh) log.addHandler(ch)
return log
Пример использования:
log = get_logger('my_log') log.debug('Start')
timeout = 1000 log.info('Timeout %s', timeout)
log.warn('Not found time!') log.error('Error while requests')
log.debug('End')
Результат в консоли и в файле:
[2017-04-03 13:34:25,047] FOO_TEST_TEST.py[LINE:32] DEBUG Start [2017-04-03 13:34:25,047] FOO_TEST_TEST.py[LINE:35] INFO Timeout 1000 [2017-04-03 13:34:25,048] FOO_TEST_TEST.py[LINE:37] WARNING Not found time! [2017-04-03 13:34:25,048] FOO_TEST_TEST.py[LINE:38] ERROR Error while requests [2017-04-03 13:34:25,048] FOO_TEST_TEST.py[LINE:40] DEBUG End

Уровень логирования задается не случайно, это является фильтром, например если в get_logger подправить строку для ch и изменить уровень с DEBUG на ERROR, то в консоль попадут логи с серьезностью от ERROR и выше:
ch = logging.StreamHandler(stream=sys.stdout) ch.setLevel(logging.ERROR)
В консоли будет только:
[2017-04-03 14:04:02,742] FOO_TEST_TEST.py[LINE:40] ERROR Error while requests
В файле будет полный лог как в первом примере

Комментариев нет:

Отправить комментарий