运行策略文件之后,打开策略文件,大部分是空白的,
有内容的存储的是报错信息,
self.write_log("策略停止")
self.write_log的信息不是应该都会存储的么?
怎么没有内容?
如何解决?
运行策略文件之后,打开策略文件,大部分是空白的,
有内容的存储的是报错信息,
self.write_log("策略停止")
self.write_log的信息不是应该都会存储的么?
怎么没有内容?
如何解决?
现在我已经看到了关键代码。让我进一步查看 LogEngine 的实现,因为它负责将日志事件写入文件。
现在我已经完全理清了问题链条,下面给出完整分析。
你遇到的是 日志级别过滤 的问题。链条如下:
write_log 的日志级别是 INFO在 CtaEngine.write_log() 中创建 LogData 时,并未显式指定 level,因此走的是默认值 INFO(整数值 20):
📄
vnpy/trader/object.py—LogData定义:[@dataclass](/user/dataclass) class LogData(BaseData): msg: str level: int = INFO # 默认 20
log.level 进行过滤日志最终由 LogEngine 交给 loguru 写入文件,而文件 sink 的写入阈值来自全局配置:
📄
vnpy/trader/logger.py:level: int = SETTINGS["log.level"] ... logger.add(sink=file_path, level=level, format=format)
log.level 很可能被设成了 ERROR 或 CRITICAL日志级别对照表:
| 级别 | 整数值 |
|---|---|
| DEBUG | 10 |
| INFO | 20 |
| WARNING | 30 |
| ERROR | 40 |
| CRITICAL | 50 |
如果 log.level 被配置为 40(ERROR)或更高,那么所有 INFO 级别的日志(包括 write_log("策略停止"))都会被过滤掉,不会写入文件。
而"报错信息"之所以能被记录,是因为系统底层(如交易接口连接失败、网关报错等)产生的日志往往是 ERROR 级别,它们高于阈值因此被保留。
配置文件位于用户目录下的 .vntrader 文件夹中:
C:\Users\<你的用户名>\.vntrader\vt_setting.json
打开 vt_setting.json,确保以下三项配置正确:
{
"log.active": true,
"log.level": 20,
"log.file": true
}
关键是将 log.level 设为 20(INFO)或 10(DEBUG),这样 write_log 输出的内容就能正常写入日志文件了。
也可以在 VeighNa Trader 菜单栏点击 【配置】 → 【全局配置】,在弹窗中直接修改:
log.active → Truelog.level → INFO(或 DEBUG)log.file → Truevt_YYYYMMDD.log,位于 .vntrader\log\ 目录下。write_log 的内容,但日志文件为空,那就基本可以确定是 log.level 配置过高的原因。log.level 就是 INFO(20),如果你从未修改过该值但仍有此问题,请检查 vt_setting.json 文件是否被其他程序意外修改。基于RAG技术开发的VeighNa AI助手,你的个人专属 Desk Quant