Log
LogReset()
重置策略日志,可选择保留最近N条数据。
函数原型
python
LogReset(keep_count=0)参数说明
| 参数名 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| keep_count | int | 否 | 0 | 保留最近N条日志记录。• 0: 清空所有策略日志• > 0: 保留最近N条日志,删除更早的数据 |
功能说明
LogReset() 用于管理策略日志数据库的存储空间:
- 清空所有日志:
LogReset()或LogReset(0)删除该策略的所有历史日志 - 保留最近N条:
LogReset(10)保留最近10条日志,删除更早的数据 - 数据库清理: 适用于长期运行的策略,定期清理日志以节省磁盘空间
- 性能优化: 减少日志数据量可以提升查询和展示性能
使用示例
示例1: 清空所有策略日志
python
def main():
# 清空所有历史日志(适用于策略重新开始)
LogReset()
Log("策略日志已清空,重新开始记录")示例2: 保留最近10条日志
python
def main():
# 只保留最近10条日志记录
LogReset(10)
Log("保留最近10条日志,清除更早的数据")示例3: 保留最近100条日志
python
def main():
# 保留最近100条日志(适用于需要一定历史但控制空间的场景)
LogReset(100)
Log("保留最近100条日志记录")示例4: 每天定时清理日志
python
def main():
last_reset_time = 0
reset_interval = 24 * 60 * 60 * 1000 # 24小时(毫秒)
while True:
now = _C(exchange.GetTime)
# 每24小时保留最近1000条日志,清理更早数据
if now - last_reset_time > reset_interval:
LogReset(1000)
Log("日志清理完成,保留最近1000条记录")
last_reset_time = now
# 策略主逻辑
ticker = _C(exchange.GetTicker)
Log(f"当前价格: {ticker['Last']}")
Sleep(1000)示例5: 策略启动时清空历史日志
python
def main():
# 策略启动时清空所有历史日志
LogReset()
Log("策略已启动,历史日志已清空")
while True:
# 策略主逻辑
ticker = _C(exchange.GetTicker)
Log(f"BTC价格: {ticker['Last']}")
Sleep(5000)示例6: 根据日志数量动态清理
python
def main():
log_count = 0
max_logs = 500 # 最大日志条数
while True:
ticker = _C(exchange.GetTicker)
Log(f"价格: {ticker['Last']}")
log_count += 1
# 当日志数量超过500条时,只保留最近200条
if log_count > max_logs:
LogReset(200)
Log("日志数量超限,已清理至200条")
log_count = 200
Sleep(1000)注意事项
- 数据不可恢复: 删除的日志数据无法恢复,请谨慎使用
- 策略隔离: 每个策略实例的日志相互独立,
LogReset()只清理当前策略的日志 - 异步操作: 日志清理操作是异步的,不会阻塞策略执行
- 性能影响: 清理大量数据时可能有短暂的数据库锁定,建议在低频交易时段执行
- 保留顺序:
keep_count参数保留的是按时间戳排序的最新N条记录
使用建议
| 场景 | 推荐用法 | 说明 |
|---|---|---|
| 策略重启 | LogReset() | 清空所有历史日志,重新开始 |
| 调试阶段 | LogReset() | 每次调试前清空日志,避免混淆 |
| 长期运行(高频日志) | LogReset(1000) | 每天/每周保留最近1000条 |
| 长期运行(低频日志) | LogReset(5000) | 每月保留最近5000条 |
| 数据库空间紧张 | LogReset(100) | 紧急清理,只保留最少数据 |
| 定期维护 | 定时任务 + LogReset(N) | 自动化清理,保持数据库健康 |
相关函数
- Log() - 记录策略日志
- LogProfitReset() - 重置收益统计数据
- LogStatus() - 记录状态信息
实现原理
数据库操作
-
清空所有数据 (
keep_count=0):sqlDELETE FROM strategy_logs WHERE real_trade_id = ? -
保留最近N条 (
keep_count>0):sqlDELETE FROM strategy_logs WHERE real_trade_id = ? AND id NOT IN ( SELECT id FROM strategy_logs WHERE real_trade_id = ? ORDER BY timestamp DESC LIMIT ? )
性能优化
- 使用索引优化
ORDER BY timestamp DESC查询 - 批量删除操作,减少数据库I/O
- 异步执行,不阻塞策略主流程
版本历史
- v1.1.0: 新增
keep_count参数,支持保留最近N条数据 - v1.0.0: 初始版本,仅支持清空所有数据