Pharos
Log

LogReset()

重置策略日志,可选择保留最近N条数据。

函数原型

python
LogReset(keep_count=0)

参数说明

参数名类型必填默认值说明
keep_countint0保留最近N条日志记录。0: 清空所有策略日志> 0: 保留最近N条日志,删除更早的数据

功能说明

LogReset() 用于管理策略日志数据库的存储空间:

  1. 清空所有日志: LogReset()LogReset(0) 删除该策略的所有历史日志
  2. 保留最近N条: LogReset(10) 保留最近10条日志,删除更早的数据
  3. 数据库清理: 适用于长期运行的策略,定期清理日志以节省磁盘空间
  4. 性能优化: 减少日志数据量可以提升查询和展示性能

使用示例

示例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)

注意事项

  1. 数据不可恢复: 删除的日志数据无法恢复,请谨慎使用
  2. 策略隔离: 每个策略实例的日志相互独立,LogReset() 只清理当前策略的日志
  3. 异步操作: 日志清理操作是异步的,不会阻塞策略执行
  4. 性能影响: 清理大量数据时可能有短暂的数据库锁定,建议在低频交易时段执行
  5. 保留顺序: keep_count 参数保留的是按时间戳排序的最新N条记录

使用建议

场景推荐用法说明
策略重启LogReset()清空所有历史日志,重新开始
调试阶段LogReset()每次调试前清空日志,避免混淆
长期运行(高频日志)LogReset(1000)每天/每周保留最近1000条
长期运行(低频日志)LogReset(5000)每月保留最近5000条
数据库空间紧张LogReset(100)紧急清理,只保留最少数据
定期维护定时任务 + LogReset(N)自动化清理,保持数据库健康

相关函数

实现原理

数据库操作

  1. 清空所有数据 (keep_count=0):

    sql
    DELETE FROM strategy_logs WHERE real_trade_id = ?
  2. 保留最近N条 (keep_count>0):

    sql
    DELETE 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: 初始版本,仅支持清空所有数据