使用文字字符串串联的Python日志记录YAML格式对齐方式

时间:2018-08-10 09:53:38

标签: python python-3.x logging yaml pyyaml

我正在尝试使用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

1 个答案:

答案 0 :(得分:0)

PyYAML源中没有field name(甚至没有field),因此ValueError不是来自不正确的YAML源。无论如何,PyYAML通常会给出更可识别的错误。

如果您这样做:

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

您收到错误:

ValueError: unexpected '{' in field name

这就是日志记录模块正在尝试执行的操作。它不会将该字符串解释为f字符串,而是在内部使用带有适当参数的format()字符串。