Appearance
工具函数
日志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)参数详情
| 参数名 | 类型 | 必选 | 含义与说明 |
|---|---|---|---|
| msg | str | 是 | 日志文本内容,支持字符串格式化,可传入需记录的调试、运行、警告或错误信息 |
级别说明
| 级别 | 适用场景 |
|---|---|
| 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)参数详情
| 参数名 | 类型 | 必选 | 含义与取值说明 |
|---|---|---|---|
| level | str | 是 | 日志级别,必须为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("所有日志已关闭,此信息无输出") # 无输出,日志功能已关闭日志使用最佳实践
- 开发调试阶段:设置log.set_level('debug'),配合log.debug()记录变量、中间结果,快速排查代码逻辑问题;
- 实盘运行阶段:设置log.set_level('warning')或info,减少日志冗余,仅保留关键运行和异常信息;
- 异常处理场景:在try/except代码块中使用log.error()记录错误原因,便于后续策略复盘和问题定位;
- 日志内容规范:日志中包含标的、时间、资金等关联信息,让日志更易解读(如log.info(f"{context.current_dt} 调仓完成,持仓标的:{list(context.portfolio.positions.keys())}"))。