Logging — модуль для ведения логов в Python
28.02.2018
Теги: Python • Web-разработка • Модуль
Многие программисты используют оператор print
для исправления багов, но гораздо удобнее использовать логирование для этих целей. Использование лога также более легкий способ, если нет желания просматривать весь код, чтобы удалить все вызовы print()
.
Создание лога при помощи модуля logging
это очень просто:
import logging logging.basicConfig(filename = "sample.log", level = logging.INFO) logging.debug("This is debug message") logging.info("This is info message") logging.warning("This is warning message") logging.error("This is error message") logging.critical("This is critical message")
Существует пять уровней логирования (в порядке возрастания):
DEBUG
INFO
WARNING
ERROR
CRITICAL
По умолчанию, идет дозапись в файл лога. Если вы хотите, чтобы логгер перезаписывал файл, надо передать basicConfig()
параметр filemode="w"
. Посмотрим, что у нас в файле sample.log
:
INFO:root:This is info message WARNING:root:This is warning message ERROR:root:This is error message CRITICAL:root:This is critical message
Сообщения debug(
) нет в файле sample.log
. Это связанно с тем, что установлен уровень INFO
, так что логгер будет записывать только сообщения INFO
, WARNING
, ERROR
или CRITICAL
. Часть root
означает, что данное сообщение пришло либо от корневого логгера, либо от основного.
В конфиге логгера можно задать формат выводимого сообщения:
logging.basicConfig(format = '%(filename)s[LINE:%(lineno)d]# %(levelname)-8s [%(asctime)s] %(message)s', level = logging.DEBUG)
Теперь вывод будет таким:
example.py[LINE:3]# DEBUG [2018-02-28 10:24:59,757] This is debug message example.py[LINE:4]# INFO [2018-02-28 10:24:59,757] This is info message example.py[LINE:5]# WARNING [2018-02-28 10:24:59,776] This is warning message example.py[LINE:6]# ERROR [2018-02-28 10:24:59,776] This is error message example.py[LINE:7]# CRITICAL [2018-02-28 10:24:59,776] This is critical message
Вызов метода logging.disable(level)
отключает все следующий за ним инструкции логгирования уровня level
и ниже. Таким образом, разместив его сразу за import logging
можно быстро включить или выключить логгирование:
import logging # logging.disable(logging.CRITICAL)
Получение обратной трассировки стека вызовов:
import traceback def first(): second() def second(): raise Exception('Это сообщение об ошибке') try: first() except: traceFile = open('trace.txt', 'w') traceFile.write(traceback.format_exc()) traceFile.close()
Содержимое файла trace.txt
:
Traceback (most recent call last): File "D:\python\trace.py", line 10, in <module> first() File "D:\python\trace.py", line 4, in first second() File "D:\python\trace.py", line 7, in second raise Exception('Это сообщение об ошибке') Exception: Это сообщение об ошибке
Логгирование из нескольких модулей
Поиск: Python • Web-разработка • Модуль