Выравнивание форматирования YAML в журнале Python с конкатенацией буквенных строк

Я пытаюсь настроить мой формат регистрации в приложении Python 3, используя формат конфигурации YAML. Однако я не смог отформатировать его так, как хотел.

Формат использует интерполяцию f-строки для интерпретации значений из регистратора. Я хочу добавить буквальную строку к этому интерпретированному значению, а затем выровнять и дополнить все это.

Это мой текущий конфиг:

formatters:
    complex:
        format: '{asctime} {name:<16} [{levelname:^9}] {funcName:16} {message}'
        datefmt: "%d/%m/%Y %H:%M:%S"
        style: '{'

Что я хочу сделать, это добавить строку (): в funcName, так что результат будет, например.

<somestuff> myfunction(): <somemessage>

YAML позволяет мне использовать {funcName:16}(): но это приводит к

myFunction (): <somemessage>

Мне удалось найти способ использования вложенных f-строк при использовании простой функции печати в случайном файле.py

funcName = "myFunction"
print(f"<somestuff> {'f{funcName}():':16} <somemessage>")

Это правильно печатает сообщение

<somestuff> myfunction(): <somemessage>

Но изменение форматирования YAML на то же самое дает мне кучу ошибок и не работает.

'{asctime} {name:<16} [{levelname:^9}] {"f{funcName}():":16} {message}'

Я также пытался избежать символов (): помещая их в двойные фигурные скобки в соответствии со спецификацией f-строки, но это также приводило к ошибкам.

Есть ли способ присоединить строковый литерал к интерпретируемой строке?

РЕДАКТИРОВАТЬ: ошибка дана ValueError: unexpected '{' in field name

1 ответ

Здесь нет field name (или даже field) в источнике PyYAML, поэтому ValueError не исходит из неверного источника YAML. В любом случае PyYAML выдает более опознаваемую ошибку.

Если вы делаете:

print("<somestuff> {'f{funcName}():':16} <somemessage>".format())

Вы получаете ошибку:

ValueError: unexpected '{' in field name

И это то, что пытается сделать модуль регистрации. Он не интерпретирует эту строку как f-строку, он использует format() внутри строки, с соответствующими аргументами.

Другие вопросы по тегам