python - Python 记录 YAML 格式与文字字符串连接的对齐方式
问题描述
我正在尝试使用 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()
在内部使用该字符串,并带有适当的参数。
推荐阅读
- angularjs - 有没有办法使用角度材料拖放来调整大小
- python - Google App Engine:禁用服务的会话中间件
- amazon-web-services - Jenkins 启动 AWS EC2 实例的工作?
- c# - C# 正则表达式在字符串匹配后查找并删除文本
- python - 在linux中打开文件时出现UnicodeDecodeError,但在Windows中打开相同的文件
- google-apps-script - 有没有办法在今天将其写入 Google 表格中的单元格时冻结它?
- c# - 如何发送图像 base64 Web 服务 POST C#
- terraform - 为什么我需要“auth/token/create”路径上的“更新”功能来读取 AWS 密钥引擎生成的密钥?
- python - 是否可以编写一个函数级的 pytest 夹具,将模拟装饰器应用于函数?
- c# - FluentValidation NotEqual 客户端规则