Форматирование логов

В предыдущей статье мы познакомили вас с логированием. В этой статье мы рассмотрим как поменять внешний вид логов, как записывать то, что вам важно. Например, время события или строку, где всё происходит.

По умолчанию логи выглядят так:

DEBUG:root:This is a debug message
INFO:root:This is an info message
WARNING:root:This is a warning message
ERROR:root:This is an error message
CRITICAL:root:This is a critical message

Если присмотреться, можно понять шаблон, по которому они составляются:

УРОВЕНЬ:название_логгера:сообщение

Документация подтверждает догадку:

The default format set by basicConfig() for messages is:

severity:logger name:message

Как раз этот шаблон мы и будем менять.

Как менять шаблон

Давайте сразу начнём с примера:

import logging

logging.basicConfig(format="%(process)d %(levelname)s %(message)s")
logging.warning("This is a Warning")

С такими настройками запись выглядит так:

4822 WARNING This is a Warning

Сравните format с получившейся записью логов. В format участвуют process,levelname и message. По названиям можно разобраться, что:

  • 4822 — это process;
  • WARNING — это levelname;
  • This is a Warning — это message.

process, levelname и message — атрибуты записи логов. В логи автоматически записывается время, название файла, номер строки и много всего другого, просто по умолчанию эта информация не видна. Запись этих вещей происходит без вашего участия, ничего для этого делать не нужно.

Чтобы один из атрибутов выводился, его нужно взять в скобки, поставить перед ним процент (%) и в конце указать тип значения. ddigit, число. sstring, строка.

Ещё раз присмотримся к format из прошлого примера:

format="%(process)d %(levelname)s %(message)s"

Можно прочитать его так: Выведи номер процесса (число), затем уровень логов (строка), затем сообщение (строка).

Вот ещё несколько полезных атрибутов логов, за полной таблицей приглашаем в документацию:

Атрибут Как выглядит format Описание Пример
asctime %(asctime)s Время создания лога (Удобная запись) 2019-04-15 20:28:33,342
created %(created)f Время создания лога (UTC) 1555349313
pathname %(pathname)s Полный путь до файла, где создан лог ~/programming/run.py
filename %(filename)s В каком файле создан лог main.py
funcName %(funcName)s В какой функции создан лог my_function
lineno %(lineno)d На какой строке создан лог 15
message %(message)s Сообщение, которое вы передали This is a warning message
levelname %(levelname)s Уровень лога WARNING

Что читать дальше?

Обращайтесь к нашим статьям:

К статьям с других сайтов:

Или к документации logging


Попробуйте бесплатные уроки по Python

Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.

Переходите на страницу учебных модулей «Девмана» и выбирайте тему.