问题描述
解决方案
在聚宽(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') - 恢复默认设置:
如果不调用该函数,默认级别通常为debug或info(视具体环境而定),建议在排查问题时注释掉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() 会被打印出来。