Я иногда путаю формат в строках шаблона для модуля logging
Python, например:
import logging
logging.warning('%d', 1, 2) # BROKEN
В консоли я вижу предупреждение (трассировка стека опущена):
--- Logging error ---
Traceback (most recent call last):
File ".../python3.7/logging/__init__.py", line 1034, in emit
msg = self.format(record)
File ".../python3.7/logging/__init__.py", line 880, in format
return fmt.format(record)
File ".../python3.7/logging/__init__.py", line 619, in format
record.message = record.getMessage()
File ".../python3.7/logging/__init__.py", line 380, in getMessage
msg = msg % self.args
TypeError: not all arguments converted during string formatting
Call stack:
...
Message: '%d'
Arguments: (1, 2)
Однако ни мое сообщение, ни это предупреждение не отправляются обработчику журнала, который фактически записал бы его в файл журнала, отправил бы его в logstash и т. Д.
Я знаю, что могу найти эти ошибки с pylint , используя logging-too-less-args (E1206) и logging-too-many-args (E1205), однако я все еще предпочел бы некоторое время выполнения отступление на случай, если один из них ускользнет.
Так что, если не следить за stderr из-за пределов Python, такие ошибки легко не заметить.
Есть ли способ по-прежнему регистрировать сообщение с маркером и основными деталями, например:
[LogBug] message = '% d', аргументы = (1, 2)
Таким образом, исходная информация все равно будет сохранена, и можно будет периодически сканировать файлы журналов для маркера [LogBug]
.