Logging — модуль для ведения логов в Python

28.02.2018

Теги: PythonWeb-разработкаМодуль

Многие программисты используют оператор 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-разработка • Модуль

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.