Создать запись только с атрибутами вместо сообщения в Python Logging - PullRequest
0 голосов
/ 04 января 2019

Есть ли простой способ создать запись журнала в Python, где вместо отправки сообщения вы просто отправляете список атрибутов?

Насколько я понимаю, такие методы, как logger.info и logger.debug, являются просто методами создания записей журнала на определенных уровнях. Эти методы вызывают метод self._log, который сам вызывает метод self.makeRecord.

Если бы я хотел создать записи, в которых атрибут сообщения отсутствует, могу ли я просто вызвать logger.makeRecord, передав None сообщению и словарь атрибутов аргументу extra ключевого слова? Или я должен позвонить self._log и передать эти аргументы? Или ничего из этого не работает? Могу ли я вместо этого просто передать extra методу logger.info тоже?

Кроме того, если это возможно, почему это не делается чаще? Кажется, что идеальный рабочий процесс имел бы только атрибуты, передаваемые в запись журнала, а затем сообщение было бы скомпилировано средством форматирования после.

Извините за столько мини-вопросов в этом посте.

1 Ответ

0 голосов
/ 04 января 2019

Почему вы не можете отформатировать строку регистрации, чтобы получить эти дополнительные аргументы? extra kwarg предназначен для этой цели явно. Из их документов :

FORMAT = '%(asctime)-15s %(clientip)s %(user)-8s %(message)s'
logging.basicConfig(format=FORMAT)
d = {'clientip': '192.168.0.1', 'user': 'fbloggs'}
logger = logging.getLogger('tcpserver')
logger.warning('Protocol problem: %s', 'connection reset', extra=d)

# which prints this
2006-02-08 22:20:02,165 192.168.0.1 fbloggs  Protocol problem: connection reset

extra для отображения kwarg, поэтому, если вы хотите, чтобы он построил для вас строку, он может. «message» является позиционным, поэтому его нельзя игнорировать. Однако ничто не мешает вам предоставить пустую строку '' как позиционный аргумент message

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...