Как я могу перечислить все доступные атрибуты LogRecord? - PullRequest
0 голосов
/ 27 января 2020

Официальная документация содержит таблицу с всеми доступными атрибутами для ведения журнала .

Эти атрибуты, в свою очередь, могут использоваться в средствах форматирования (например, '[{asctime}] {levelname} [{threadName}] [{name}.{funcName}:{lineno}] {message}' является одним из таких средств форматирования).

Однако можно ли получить список всех доступных атрибутов во время выполнения, не полагаясь на документацию?

Допустим, моя цель состоит в том, чтобы процедурным образом создать средство форматирования, которое включает все атрибуты независимо от версия. Как отмечается в самой документации, processName был добавлен в 3.1 и не был там указан, когда он был еще 3.0, что означает, что если бы в моем скрипте использовались жестко закодированные атрибуты 3.0, он не использовал бы processName, даже если он выполнялся в переводчик 3.1 ^.

1 Ответ

1 голос
/ 27 января 2020

Вы можете создать экземпляр LogRecord и посмотреть на него. Вы, вероятно, хотите отфильтровать стандартные атрибуты __.

import logging

rec = logging.LogRecord('',0,None,0,'',[],None) # create a minimal LogRecord
all_attributes = dir(rec)
filtered_attributes = [a for a in all_attributes if '__' not in a]
...