我正在尝试使用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
答案 0 :(得分:0)
PyYAML源中没有field name
(甚至没有field
),因此ValueError不是来自不正确的YAML源。无论如何,PyYAML通常会给出更可识别的错误。
如果您这样做:
print("<somestuff> {'f{funcName}():':16} <somemessage>".format())
您收到错误:
ValueError: unexpected '{' in field name
这就是日志记录模块正在尝试执行的操作。它不会将该字符串解释为f字符串,而是在内部使用带有适当参数的format()
字符串。