Skip to content

feat: автоудаление старых лог-файлов и сжатие ротированных логов (fixes #274) - #328

Open
eminsk wants to merge 1 commit into
Duff89:masterfrom
eminsk:feat/log-cleanup
Open

eminsk wants to merge 1 commit into
Duff89:masterfrom
eminsk:feat/log-cleanup

Conversation

@eminsk

@eminsk eminsk commented Sep 4, 2026

Copy link
Copy Markdown

Автоматическая очистка устаревших лог-файлов и сжатие логов (Fixes #274)

Реализовано решение проблемы переполнения постоянной памяти на серверах и VPS из-за накопления лог-файлов.

В чем была проблема (#274):

Ротация Loguru (retention="5 days") срабатывает только в рамках одного непрерывного процесса при превышении размера файла (5 MB). При частых перезапусках парсера, сбоях или аварийных остановках старые логи прошлых сессий никогда не удалялись автоматически и занимали гигабайты памяти на диске.

Что сделано:

  1. Автоматическая очистка при старте (utils/log_cleanup.py):
    • Реализована функция clean_old_logs(), которая сканирует директорию логов при запуске приложения (parser_cls.py и AvitoParser.py).
    • Удаляет файлы старше log_retention_days (по умолчанию 5 дней).
    • Ограничивает общее число файлов логов лимитом log_max_files (по умолчанию 10), удаляя самые старые при превышении.
    • Безопасно обрабатывает заблокированные системой файлы без прерывания работы парсера.
  2. Сжатие ротированных логов:
    • Для хендлера logger.add("logs/app.log") включен параметр compression="zip". Текстовые логи сжимаются более чем на 90%, что практически сводит к нулю потребление дискового пространства архивными файлами.
  3. Настройки в config.toml и dto.py:
    • Добавлены параметры log_retention_days = 5 и log_max_files = 10 в AvitoConfig.
  4. Тестирование (tests/test_log_cleanup.py):
    • Написаны модульные тесты: проверка удаления старых файлов по возрасту, проверка ограничения по общему количеству, обработка отсутствующей папки и сохранение не связанных с логами файлов.
    • Все 4 теста успешно проходят.

- Automatically prune log files older than log_retention_days (default 5 days) on startup
- Enforce max_files limit (default 10) to prevent disk space exhaustion on small VPS/servers (fixes Duff89#274)
- Enable zip compression for rotated log files in Loguru, reducing log disk usage by 90%+
- Add log_retention_days and log_max_files options to AvitoConfig and config.toml
- Add unit tests in tests/test_log_cleanup.py
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[IDEA]: Автоудаление старых лог-файлов/Цикличная перезапись лог

1 participant