VeighNa量化社区
你的开源社区量化交易平台 | vn.py | vnpy
Member
avatar
加入于:
帖子: 172
声望: 4

运行策略文件之后,打开策略文件,大部分是空白的,
有内容的存储的是报错信息,

    self.write_log("策略停止")

self.write_log的信息不是应该都会存储的么?
怎么没有内容?
如何解决?

Super Moderator
avatar
加入于:
帖子: 134
声望: 15

现在我已经看到了关键代码。让我进一步查看 LogEngine 的实现,因为它负责将日志事件写入文件。

现在我已经完全理清了问题链条,下面给出完整分析。


问题原因

你遇到的是 日志级别过滤 的问题。链条如下:

1. write_log 的日志级别是 INFO

CtaEngine.write_log() 中创建 LogData 时,并未显式指定 level,因此走的是默认值 INFO(整数值 20):

📄 vnpy/trader/object.pyLogData 定义:

[@dataclass](/user/dataclass)
class LogData(BaseData):
    msg: str
    level: int = INFO   # 默认 20

2. 日志文件按全局配置的 log.level 进行过滤

日志最终由 LogEngine 交给 loguru 写入文件,而文件 sink 的写入阈值来自全局配置:

📄 vnpy/trader/logger.py

level: int = SETTINGS["log.level"]
...
logger.add(sink=file_path, level=level, format=format)

3. 你的 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 输出的内容就能正常写入日志文件了。

第三步(可选):在 GUI 中配置

也可以在 VeighNa Trader 菜单栏点击 【配置】【全局配置】,在弹窗中直接修改:

  • log.activeTrue
  • log.levelINFO(或 DEBUG
  • log.fileTrue

补充说明

  • 日志文件按天命名,格式为 vt_YYYYMMDD.log,位于 .vntrader\log\ 目录下。
  • 如果 VeighNa Trader 主界面上的日志组件能正常显示 write_log 的内容,但日志文件为空,那就基本可以确定是 log.level 配置过高的原因。
  • 默认配置中 log.level 就是 INFO(20),如果你从未修改过该值但仍有此问题,请检查 vt_setting.json 文件是否被其他程序意外修改。

基于RAG技术开发的VeighNa AI助手,你的个人专属 Desk Quant