如何在TOML文件中创建带时间戳命名的日志文件?
修正TOML中动态日志文件名的问题
错误原因
TOML是静态配置文件格式,原生不支持字符串拼接、变量插值这类动态语法,你写的"..log/pytest_" + {timestamp} + ".log"违反了TOML的语法规则,所以触发ValueError: Found tokens after a closed string. Invalid TOML错误。另外注意两处笔误:loge_file应为log_file,路径..log缺少斜杠,正确路径是../log。
解决方案
根据使用场景,有两种可行处理方式:
1. 原生TOML + 代码层替换占位符
在TOML文件中定义带占位符的文件名,然后在加载配置的代码里替换成实际时间戳:
TOML文件内容:
log_file = "../log/pytest_{timestamp}.log"
加载配置的Python代码示例:
import toml from datetime import datetime # 加载TOML配置 config = toml.load("你的配置文件名.toml") # 生成格式化时间戳(可自定义格式,比如%Y%m%d_%H%M%S) timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") # 替换占位符得到最终日志路径 final_log_path = config["log_file"].format(timestamp=timestamp)
2. 使用支持模板插值的工具扩展
如果你的TOML文件被支持模板插值的工具加载(比如pytest配置、Poetry的pyproject.toml配合特定插件,或用Jinja2预处理TOML),可以用工具支持的模板语法:
比如用Jinja2预处理TOML时,文件内容可写成:
log_file = "../log/pytest_{{ timestamp }}.log"
随后在预处理代码中传入timestamp变量,渲染后再加载为TOML。
内容的提问来源于stack exchange,提问作者user95525
相关产品推荐
相关产品推荐

