Skip to content

工具函数

日志log信息

  • log 分级别打印日志信息,日志会同时输出到终端和日志文件,包含debug、info、warning、error四个等级,级别优先级:debug < info < warning < error。该功能类似print,但print仅输出到终端,不会写入日志文件,适合策略运行过程的持久化记录与问题排查。

函数原型

python
log.debug(msg)
log.info(msg)
log.warning(msg)
log.error(msg)

参数详情

参数名类型必选含义与说明
msgstr日志文本内容,支持字符串格式化,可传入需记录的调试、运行、警告或错误信息

级别说明

级别适用场景
debug细粒度调试信息,用于开发阶段排查代码逻辑、变量取值等细节问题,粒度最细
info常规运行信息,用于描述策略正常执行过程(如调仓完成、参数初始化),默认输出
warning潜在风险提示,用于指明策略运行中出现的非致命异常(如标的数据缺失、仓位不足)
error错误事件记录,用于记录策略运行中的致命性问题(如订单提交失败、标的不存在),策略或可继续运行

完整示例

python
def initialize(context):
    context.stock = '000001'  # 初始化关注标的为平安银行
    # 记录策略初始化完成的常规信息
    log.info(f"策略初始化完成,关注标的:{context.stock}")  # 输出:INFO:策略初始化完成,关注标的:000001

def handle_data(context, data):
    try:
        # 调试级:记录标的前一分钟收盘价,排查行情数据问题
        last_close = data[context.stock].close
        log.debug(f"标的{context.stock}前一分钟收盘价:{last_close}")  # 输出:DEBUG:标的000001前一分钟收盘价:15.25
        # 警告级:检测到可用资金不足,提示潜在开仓风险
        if context.portfolio.cash < 1000:
            log.warning(f"账户可用资金不足:{context.portfolio.cash:.2f}元,无法开仓")  # 输出:WARNING:账户可用资金不足:890.30元,无法开仓
    except KeyError:
        # 错误级:记录标的无行情数据的错误,便于问题复盘
        log.error(f"标的{context.stock}无行情数据,跳过本次处理")  # 输出:ERROR:标的000001无行情数据,跳过本次处理

设置日志级别

  • log.set_level 用于设置日志的最低输出级别,低于该级别的日志会被过滤,不会输出到终端和日志文件,日志级别默认值为info。

函数原型

python
log.set_level(level)

参数详情

参数名类型必选含义与取值说明
levelstr日志级别,必须为debug、info、warning、error、off中的一个,级别优先级:debug < info < warning < error < off;
• debug:输出所有级别日志,适合开发调试;
• info:默认级别,过滤debug信息,输出常规、警告、错误日志;
• warning:仅输出警告、错误日志,适合实盘减少冗余;
• error:仅输出错误日志,重点监控异常场景;
• off:关闭所有日志记录,一般不推荐使用

完整示例

python
def initialize(context):
    # 示例1:开发调试时,设置为debug级别,输出所有日志
    log.set_level('debug')
    log.debug("日志级别已设为debug,所有级别日志均输出")  # 输出:DEBUG:日志级别已设为debug,所有级别日志均输出
    
    # 示例2:实盘运行时,设置为warning级别,仅输出警告和错误日志
    log.set_level('warning')
    log.debug("此debug信息会被过滤,无输出")  # 无输出,级别低于warning
    log.warning("账户仓位即将超出阈值,请注意调整")  # 输出:WARNING:账户仓位即将超出阈值,请注意调整
    
    # 示例3:临时关闭所有日志记录
    log.set_level('off')
    log.info("所有日志已关闭,此信息无输出")  # 无输出,日志功能已关闭

日志使用最佳实践

  1. 开发调试阶段:设置log.set_level('debug'),配合log.debug()记录变量、中间结果,快速排查代码逻辑问题;
  2. 实盘运行阶段:设置log.set_level('warning')或info,减少日志冗余,仅保留关键运行和异常信息;
  3. 异常处理场景:在try/except代码块中使用log.error()记录错误原因,便于后续策略复盘和问题定位;
  4. 日志内容规范:日志中包含标的、时间、资金等关联信息,让日志更易解读(如log.info(f"{context.current_dt} 调仓完成,持仓标的:{list(context.portfolio.positions.keys())}"))。

文档版本: 1.0.0 | 发布于 2025-01-29