Экземпляры logging.LogRecord
создаются logging.Logger
автоматически каждый раз, когда что-то регистрируется.
Объект logging.LogRecord
содержит всю информацию, относящуюся к регистрируемому событию. Первичная информация передается в виде msg
и args
, которые объединяются с помощью msg % args
для создания поля сообщения записи.
LogRecord
.Объект LogRecord
имеет ряд атрибутов, большинство из которых получены из параметров конструктора. Эти атрибуты можно использовать для объединения данных из записи в строку формата. В следующей таблице перечислены в алфавитном порядке имена атрибутов, их значения и соответствующий заполнитель при форматировании строки формата в стиле printf
.
Если используется форматирование в стиле str.format()
, то можно использовать фигурные скобки {attrname}
в качестве заполнителя в строке формата. Если используется форматирование в стиле string.Template()
, то можно использовать форму ${attrname}
. В обоих случаях, заменяется attrname
на фактическое имя атрибута, которое нужно использовать.
В случае форматирование в стиле str.format()
можно указать флаги форматирования, поместив их после имени атрибута, отделенного от него двоеточием. Например: заполнитель {msecs: 03d}
отформатирует значение миллисекунды, равное 4, как 004. Для получения полной информации о доступных опциях обратитесь к документации по функции str.format()
.
Имя атрибута | Формат | Описание |
args | Не нужно форматировать это самостоятельно. | Кортеж аргументов объединяется в `msg` для создания сообщения или `dict`, значения которого используются для слияния (когда есть только один аргумент и это словарь). |
asctime | %(asctime)s | Удобочитаемое время, когда был создан объект `LogRecord`. По умолчанию имеет вид `2003-07-08 16: 49: 45,896`. Числа после запятой - это доли миллисекунды. |
created | %(created)f | Время создания `LogRecord`, возвращаемое функцией `time.time()`. |
exc_info | Не нужно форматировать это самостоятельно. | Корректировка исключений как `sys.exc_info()` или `None`, если исключений не произошло. |
filename | %(filename)s | Часть пути имени файла. |
funcName | %(funcName)s | Имя функции, содержащей вызов `logging`. |
levelname | %(levelname)s | Текстовое значение уровня логирования ('DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'). |
levelno | %(levelno)s | Числовое значение уровня логирования (10, 20, 30, 40, 50). |
lineno | %(lineno)d | Номер исходной строки, где был выполнен вызов (если имеется). |
message | %(message)s | Зарегистрированное сообщение, вычисленное как `msg % args`. Это устанавливается при вызове `Formatter.format()`. |
module | %(module)s | Модуль (часть имени файла). |
msecs | %(msecs)d | Миллисекундная часть времени, когда был создан `LogRecord`. |
msg | Не нужно форматировать это самостоятельно. | Строка формата, переданная в исходном вызове логгера. Объединяется с аргументами для создания сообщения или произвольного объекта. |
name | %(name)s | Имя логгера, используемого для регистрации вызова. |
pathname | %(pathname)s | Полный путь к исходному файлу, из которого был сделан вызов логгера (если имеется). |
process | %(process)d | Идентификатор процесса (если имеется). |
processName | %(processName)s | Имя процесса (если доступно). |
relativeCreated | %(relativeCreated)d | Время в миллисекундах, когда `LogRecord` был создан, относительно времени, когда был загружен модуль логирования `logging`. |
stack_info | Не нужно форматировать это самостоятельно. | Информация о стековом кадре (если она доступна) из нижней части стека в текущем потоке, вплоть до фрейма стека вызова логгера, который привел к созданию этой записи. |
thread | %(thread)d | Идентификатор потока (если имеется). |
threadName | %(threadName)s | Имя потока (если доступно). |
|
Больше примеров смотрите в разделе "Продвинутое использование модуля logging в Python".
import logging # создаем регистратор logger = logging.getLogger('logger') logger.setLevel(logging.DEBUG) # создаем обработчик для файла и # установим уровень отладки ch = logging.FileHandler('example.log') ch.setLevel(logging.DEBUG) # строка формата сообщения strfmt = '[%(asctime)s] [%(name)s] [%(levelname)s] > %(message)s' # строка формата времени datefmt = '%Y-%m-%d %H:%M:%S' # создаем форматтер formatter = logging.Formatter(fmt=strfmt, datefmt=datefmt) # добавляем форматтер к 'ch' ch.setFormatter(formatter) # добавляем ch в регистратор logger.addHandler(ch) # вызов функций, регистрирующих # события в коде logger.debug('debug message') logger.info('info message') logger.warning('warn message') logger.error('error message') logger.critical('critical message')
Запуск этого кода приведет к созданию файла 'example.log' с записями внутри:
[2020-06-08 07:42:59] [logger] [DEBUG] > debug message [2020-06-08 07:42:59] [logger] [INFO] > info message [2020-06-08 07:42:59] [logger] [WARNING] > warn message [2020-06-08 07:42:59] [logger] [ERROR] > error message [2020-06-08 07:42:59] [logger] [CRITICAL] > critical message