簡體   English   中英

Python使用文字字符串串聯記錄YAML格式對齊

[英]Python logging YAML formatting alignment with literal string concatenation

我正在嘗試使用YAML配置格式在Python 3應用程序中設置我的日志記錄格式。 但是,我發現自己無法按照自己的方式格式化它。

該格式使用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>

在隨機的.py文件中使用簡單的打印功能時,我已經找到了使用嵌套f字符串的方法

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

PyYAML源中沒有field name (甚至沒有field ),因此ValueError不是來自不正確的YAML源。 無論如何,PyYAML通常會給出更可識別的錯誤。

如果您這樣做:

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

您得到錯誤:

ValueError: unexpected '{' in field name

這就是日志記錄模塊正在嘗試執行的操作。 它不會將該字符串解釋為f字符串,而是在內部使用帶有適當參數的format()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM