LogAnalyzerCLI — это инструмент командной строки для анализа логов, который поддерживает многопроцессорную обработку и позволяет создавать настраиваемые отчёты. Приложение предназначено для работы с большими файлами логов и предоставляет гибкий интерфейс для добавления новых типов отчётов.
main.py: Точка входа для запуска приложения.reportcli/cli.py: Определяет интерфейс командной строки для взаимодействия с приложением.reportcli/reports/base.py: Содержит базовый классBaseReport, который используется для создания отчетов.reportcli/reports/handler.py: Реализует отчетHandlersReport, который анализирует Django-логи.reportcli/processor.py: Содержит логику обработки файлов логов с использованием многопроцессорности.test.py: Набор тестов для проверки функциональности приложения.
- Многопроцессорная обработка: Использует все доступные ядра процессора для ускорения анализа больших файлов логов.
- Гибкость: Возможность добавления новых типов отчётов через наследование от базового класса
BaseReport. - Поддержка больших данных: Эффективная обработка логов размером в десятки и сотни мегабайт.
- Простота использования: Удобный интерфейс командной строки для запуска анализа.
python3 main.py logs/app1.log logs/app2.log logs/app3.log --report handlersВывод:
Total requests: 8355840
HANDLER DEBUG INFO WARNING ERROR CRITICAL
/admin/dashboard/ 0 835584 0 278528 0
/admin/login/ 0 696320 0 139264 0
/api/v1/auth/login/ 0 557056 0 139264 0
/api/v1/cart/ 0 417792 0 0 0
/api/v1/checkout/ 0 835584 0 139264 0
/api/v1/orders/ 0 278528 0 278528 0
/api/v1/payments/ 0 974848 0 139264 0
/api/v1/products/ 0 417792 0 0 0
/api/v1/reviews/ 0 696320 0 0 0
/api/v1/shipping/ 0 278528 0 139264 0
/api/v1/support/ 0 139264 0 417792 0
/api/v1/users/ 0 557056 0 0 0
0 6684672 0 1671168 0Для запуска тестов выполните:
pytest -v test.pyВы можете создать собственный тип отчета, унаследовавшись от BaseReport. Для этого:
- Создатть новый класс, унаследованный от BaseReport.
- Реализовать методы process_line, merge и render.
- Зарегистрировать новый отчет, указав report_name в объявлении класса.
- Импортировать его в
reposts/__init__.py
Пример по аналогии в reports/handler.py
и что бы зыпустить конкретный отчет нужно будет указать --report report_name