Какие существуют рекомендации по написанию логгирования для режима 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
В файле будет полный лог как в первом примере
Комментариев нет:
Отправить комментарий