🚀 AI 一键生成 joinquant 策略代码

JoinQuant 策略调试指南:如何有效管理和过滤日志信息?

joinquant | 发布时间: 2025/12/4
以下内容由 EasyQuant 生成。

问题描述

如何只显示错误日志,或者关闭下单成功提示的日志?

解决方案

在聚宽(JoinQuant)中过滤日志与关闭下单提示

在聚宽平台中,若希望只显示错误日志或关闭下单成功的提示(通常属于 info 级别),可以使用 log.set_level 函数来调整日志的输出级别。

该函数通常在 initialize 初始化函数中调用。

核心代码实现

要关闭下单成功的提示并只显示错误日志,请在策略代码中添加以下设置:

def initialize(context):
    # 设置 'order' 类别的日志级别为 'error'
    # 这意味着 'debug', 'info', 'warning' 级别的日志(包括下单成功提示)将被过滤
    # 只有下单失败等 'error' 级别的日志会被打印
    log.set_level('order', 'error')
    
    # 如果也想过滤系统日志,可以设置 system
    # log.set_level('system', 'error')

函数详解:log.set_level

log.set_level(name, level) 用于设置不同种类日志的输出级别,低于设定级别的日志将不会被打印。

1. 参数说明

  • name (日志种类):

    • 'order': 对应调用 order 系列 API(如 order, order_target 等)产生的日志。下单成功通常是 info 级别,下单失败通常是 error 级别。
    • 'system': 系统运行相关的日志。
    • 'history': 调用历史数据 API 产生的日志。
    • 'strategy': 用户在策略中使用 log.info() 等手动打印的日志。
  • level (日志级别):

    • 级别从低到高依次为:'debug' < 'info' < 'warning' < 'error'
    • 设置某个级别后,只有等于或高于该级别的日志会被输出。

2. 常见设置场景

  • 只看报错,不看下单流水
    log.set_level('order', 'error')
    
  • 调试模式(查看所有细节)
    log.set_level('order', 'debug')
    
  • 恢复默认设置
    如果不调用该函数,默认级别通常为 debuginfo(视具体环境而定),建议在排查问题时注释掉 log.set_level 语句。

Q&A

Q: log.set_level 必须放在 initialize 中吗?
A: 建议放在 initialize 中,这样策略一开始运行就会生效。如果在 handle_data 中调用,虽然也能生效,但会重复执行,没有必要。在模拟交易中,如果修改了代码,可以在 after_code_changed 中重新设置。

Q: 我设置了 log.set_level('order', 'error'),为什么还是看不到下单失败的报错?
A: 请确认是否真的发生了下单失败。如果策略逻辑没有触发下单,或者触发了但被风控拦截(有时风控拦截属于 warning 级别),可能需要将级别调整为 warning 尝试。此外,请检查是否在策略其他地方(如 handle_data)又重新设置了日志级别覆盖了初始设置。

Q: 如何过滤掉我自己写的 log.info 打印的内容?
A: 您可以使用 log.set_level('strategy', 'error')。这样,您代码中所有的 log.info()log.warn() 都不会显示,只有 log.error() 会被打印出来。