Форматирование логов
В предыдущей статье мы познакомили вас с логированием. В этой статье мы рассмотрим как поменять внешний вид логов, как записывать то, что вам важно. Например, время события или строку, где всё происходит.
По умолчанию логи выглядят так:
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
— атрибуты записи логов. В логи автоматически записывается время, название файла, номер строки и много всего другого, просто по умолчанию эта информация не видна. Запись этих вещей происходит без вашего участия, ничего для этого делать не нужно.
Чтобы один из атрибутов выводился, его нужно взять в скобки, поставить перед ним процент (%
) и в конце указать тип значения. d
— digit
, число. s
— string
, строка.
Ещё раз присмотримся к 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