使用 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 的配置未能如预期生效,但临时解决方案为我带来了便利。在未来的项目中,我将继续探索更好的日志管理策略,以确保程序高效运行。


参考文档