随着监控的币种越来越多,我的 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 > </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 osimport timefrom datetime import datetime, timedeltadays_to_keep = 2 cutoff_time = datetime.now() - timedelta(days=days_to_keep) log_directory = "/path/to/logs" 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 设置了一个定时任务,以下是设置步骤:
打开 crontab 编辑器:
添加如下定时任务,每天凌晨 1 点执行:
1 0 1 * * * /usr/bin/python3 /path/to/your_script.py >> /path/to/cron_log.log 2>&1
保存并退出 crontab。
总结 通过使用 Python 脚本,我能够有效地管理 Carry-Coin 程序中生成的日志文件,避免了因日志文件过大导致的磁盘空间不足的问题。虽然 Logback 的配置未能如预期生效,但临时解决方案为我带来了便利。在未来的项目中,我将继续探索更好的日志管理策略,以确保程序高效运行。
参考文档