Hummingbot:开源的加密货币高频交易机器人

Hummingbot 是一个开源的高频交易机器人框架,旨在为加密货币市场提供自动化交易工具。无论是市场做市(market making)、套利(arbitrage),还是跨交易所市场做市(cross-exchange market making),Hummingbot 都为用户提供了多种实用的策略模板,帮助用户轻松上手高频交易,参与到加密货币交易市场中。

Read more

Carry-Coin 架构设计 SymbolLedger (4)

Carry-Coin 套利币本 SymbolLedger 设计,SymbolLedger负责存放套利过程中交易对信息,其中包括symbol在Cex中的各项配置、套利阈值等,Dex中的各种合约信息、阈值、交易参数等

Read more

Google 2FA 脚本

批量显示Google 2FA 工具,5秒刷新一次

Read more

BSC节点区块监控脚本

脚本主要监听私有BSC节点区块状态,如发生区块漏块过多,发送告警消息到DD群中,carry-coin调整rpc访问策略;

Read more

Carry-Coin 一个自动化搬砖套利平台

Carry-Coin 是一个套利程序,程序从23年初开始开发至今,目前已经基本稳定,现在将程序的设计整理出来;
套利思路很简单:程序监控Cex和Dex平台,针对同一币种发现差价后自动化搬运;

Read more

Carry-Coin 记服务迁移和流量优化

最近Contabo服务器频繁死机,发邮件给官方反应问题,一开始嘴硬说没问题让自查,沟通2天又是截图又是各种开票,最后承认问题说技术团队排查但是不给解决时间

邮件回复

Read more

Carry-Coin 中 Jasypt 的应用

自从最近L君小弟电脑中毒,疑似私钥泄漏,导致3W u被盗,反观我的程序一直以来裸奔的状态下,再次菊花一紧。
于是,我开始了对Spring Boot的jasypt加密配置的研究。 最坏情况服务器即使被黑,也要尽可能保证程序的安全。

  1. 配置文件中关键信息: 交易所token,钱包私钥加密;
  2. jar中yml打包时排除,服务器上用密文配置执行;
  3. 解密密码动态设置;
Read more

使用 Python 脚本清理 Carry-Coin 程序中的 Logback 日志

随着监控的币种越来越多,我的 Carry-Coin 程序中日志数据的日质量也不断增加,每天的日志文件大小达到约 40G。这不仅占用了大量的存储空间,还给日志分析带来了挑战。为了更有效地管理这些日志,我已经编写了一个程序来提取日志中与交易相关的信息,供后续分析使用。

然而,在配置 Logback 的 logback-spring.xml 文件时,我设置了 appender.rollingPolicy.maxHistory 字段,旨在只保留最近 2 天的日志。然而,这一配置并未如预期生效。因此,我决定暂时使用 Python 脚本来手动清理旧的日志文件。


问题背景

在 Carry-Coin 程序中,随着对越来越多币种的监控,日志文件的大小急剧增加,导致每天产生的日志文件约为 40G。虽然我已编写程序提取交易信息,但大量的日志数据依然占用了过多的磁盘空间。为此,我尝试通过调整 Logback 的配置来限制保留的日志数量。

Logback 日志管理

为了管理日志,我在 logback-spring.xml 文件中配置了以下内容:

1
2
3
4
5
6
7
8
9
10
<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/carry-coin.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/carry-coin.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>2</maxHistory> <!-- 只保留最近2天的日志 -->
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>

尽管如此,maxHistory 的配置并未生效,因此需要寻找替代解决方案。

Python 脚本实现

我编写了一个 Python 脚本来自动清理日志文件,保留最近 2 天的日志。以下是脚本的实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import os
import time
from datetime import datetime, timedelta

# 获取两天前的时间
days_to_keep = 2
cutoff_time = datetime.now() - timedelta(days=days_to_keep)

# 定义日志目录
log_directory = "/path/to/logs"

# 遍历日志目录,删除修改时间在 cutoff_time 之前的 .log 文件
for filename in os.listdir(log_directory):
file_path = os.path.join(log_directory, filename)

if os.path.isfile(file_path) and filename.endswith(".log"):
file_mtime = os.path.getmtime(file_path)
file_mtime_dt = datetime.fromtimestamp(file_mtime)

if file_mtime_dt < cutoff_time:
os.remove(file_path)
print(f"Deleted: {file_path}")

说明

  • 脚本获取当前时间的两天前,遍历指定日志目录,删除修改时间在该时间之前的 .log 文件。
  • 仅处理以 .log 结尾的文件,确保只删除日志文件。

设置 Cron 定时任务

为了定期执行这个清理脚本,我使用 cron 设置了一个定时任务,以下是设置步骤:

  1. 打开 crontab 编辑器:

    1
    crontab -e
  2. 添加如下定时任务,每天凌晨 1 点执行:

    1
    0 1 * * * /usr/bin/python3 /path/to/your_script.py >> /path/to/cron_log.log 2>&1
  3. 保存并退出 crontab

总结

通过使用 Python 脚本,我能够有效地管理 Carry-Coin 程序中生成的日志文件,避免了因日志文件过大导致的磁盘空间不足的问题。虽然 Logback 的配置未能如预期生效,但临时解决方案为我带来了便利。在未来的项目中,我将继续探索更好的日志管理策略,以确保程序高效运行。


参考文档