Skip to content

Repository files navigation

log_analyzer

Консольная утилита на C++23 для статистического анализа текстовых лог-файлов. Сканирует директорию, считает строки, слова и символы, строит частотный словарь, ищет ключевые слова и выводит результаты в консоль или в JSON.

Скачать

Платформа Пакет
Ubuntu Ubuntu / Debian (amd64) log_analyzer_0.2.0_amd64.deb
Fedora Fedora / RHEL (x86_64) log_analyzer-0.2.0-1.x86_64.rpm

Все релизы →

Возможности

  • Рекурсивный обход директории — находит все файлы с расширениями .log и .txt
  • Подсчёт строк, слов и символов для каждого файла и суммарно
  • Частотный словарь слов (топ-10 в консольном отчёте, полный список в JSON)
  • Поиск произвольных ключевых слов с подсчётом совпадений
  • Консольный отчёт с сводной таблицей по каждому файлу
  • Экспорт полного отчёта в JSON (библиотека glaze)
  • Покрытие юнит-тестами через GoogleTest (8 наборов тестов)
  • Поддержка Address Sanitizer / UBSan в режиме Debug

Требования

Инструмент Минимальная версия
GCC / Clang C++23 (GCC 15, Clang 17+)
CMake 3.31
Conan 2.x

Быстрый старт

1. Установка зависимостей (Conan)

./scripts/create_env.sh Debug

Скрипт устанавливает зависимости через Conan и генерирует CMakeUserPresets.json.
На Fedora автоматически применяются профили Fedora-Debug / Fedora-Release.
Для Release-сборки:

./scripts/create_env.sh Release

2. Конфигурация и сборка

cmake --preset conan-debug
cmake --build build

Для Release:

cmake --preset conan-release
cmake --build build

3. Запуск

./build/log_analyzer <директория> [--keywords слово1,слово2,...] [--json <путь>] [--threads <N>]

По умолчанию анализ выполняется в одном потоке. Для параллельного анализа файлов используйте --threads <N>.

Примеры:

# Проанализировать директорию logs/
./build/log_analyzer logs/

# Искать ключевые слова "error" и "warning", сохранить JSON
./build/log_analyzer logs/ --keywords error,warning --json report.json

# Параллельный анализ в 8 потоков
./build/log_analyzer logs/ --threads 8

# Параллельный анализ + ключевые слова + JSON
./build/log_analyzer logs/ --keywords error,warning --threads 8 --json report.json

Аргументы командной строки

Аргумент Обязателен Описание
<root_dir> Да Корневая директория для сканирования
--keywords word1,word2,... Нет Список ключевых слов через запятую (без пробелов)
--json <path> Нет Путь к выходному JSON-файлу
--threads <N> Нет Количество потоков для параллельного анализа файлов

Пример вывода

=== Log Analyzer Report ===
----------------------------------------
Files analyzed : 3
Total lines    : 1024
Total words    : 8743
Total chars    : 61200
----------------------------------------
--- Top 10 words ---
  error: 142
  warning: 98
  info: 76
  ...

--- Keyword hits ---
  error: 142
  warning: 98

--- Per-file stats ---
  logs/app.log        lines=512  words=4200  chars=30100
  logs/system.log     lines=300  words=2800  chars=20500
  logs/debug.log      lines=212  words=1743  chars=10600

Пайплайн обработки

CLI args → FileScanner → (single-thread: FileAnalyzer ×N → Aggregator)
             → (multi-thread: ThreadPool(N) → FileAnalyzer ×N → ThreadSafeAggregator)
                                        ↓
                                      ConsoleReport
                                        └→ JsonReport
  1. FileScanner — рекурсивно находит .log/.txt файлы
  2. FileAnalyzer — читает файл построчно, токенизирует через Tokenizer, собирает FileStats
  3. Aggregator — суммирует все FileStats в TotalStats в однопоточном режиме
  4. ThreadPool + ThreadSafeAggregator — выполняют параллельный анализ и потокобезопасную агрегацию при использовании --threads
  5. ConsoleReport — печатает сводку в std::ostream
  6. JsonReport — сериализует TotalStats в JSON через glaze

Тесты

Через скрипт (запуск тестовых бинарников напрямую, без ctest):

./scripts/run_tests.sh

# Показать список тестов:
./scripts/run_tests.sh --list

# Запустить только часть тестов по gtest-фильтру:
./scripts/run_tests.sh --filter "*Cli*:*Parser*"

Наборы тестов: Test_FileScanner, Test_Parser, Test_FileAnalyzer, Test_Aggregator, Test_ConsoleReport, Test_JsonReport, Test_Cli, Test_App.

Дополнительные инструменты

Sanitizers (ASan + UBSan)

cmake --preset conan-debug -DLOG_ANALYZER_ENABLE_SANITIZERS=ON
cmake --build build

Включается только для Debug-сборок на GCC/Clang. Перед включением автоматически проверяется поддержка компилятора.

clang-tidy

./scripts/check_tidy.sh --build-type Debug
# Автоматически исправить предупреждения:
./scripts/check_tidy.sh --build-type Debug --fix

clang-format

# Применить форматирование ко всем файлам src/ и tests/:
./scripts/fix_style.sh

# Только показать список файлов без изменений:
./scripts/fix_style.sh --list

Очистка сборки

./scripts/clean.sh

Зависимости

Библиотека Версия Назначение
glaze 7.4.0 JSON-сериализация
GoogleTest 1.17.0 Юнит-тестирование

Зависимости управляются через Conan 2 и не требуют ручной установки.

About

Mini Log Analyzer for small projects

Topics

Resources

Stars

Watchers

Forks

Releases

Contributors

Languages