Быстрая TUI-утилита для анализа больших логов (до 50+ GB) с мгновенной загрузкой, regex фильтрацией и подсветкой синтаксиса.
- Мгновенное открытие больших файлов - использует memory-mapped files (mmap) для работы с файлами до 50+ GB без загрузки в RAM
- Regex фильтрация в реальном времени - поиск по регулярным выражениям с асинхронной обработкой
- Подсветка синтаксиса - автоматическое распознавание и раскраска JSON/SQL ключевых слов
- Отзывчивый интерфейс - многопоточная архитектура предотвращает зависание UI
- Интуитивное управление - навигация с помощью клавиатуры
Проект состоит из следующих компонентов:
- LogReader - управление memory-mapped файлами, индексация строк для O(1) доступа
- FilterEngine - многопоточная regex фильтрация с оптимизацией производительности
- SyntaxHighlighter - эвристическая подсветка ключевых слов JSON/SQL
- TuiDisplay - интерактивный TUI интерфейс на базе FTXUI
- Компилятор: GCC 9+ или Clang 10+ с поддержкой C++20
- CMake: версия 3.14 или выше
- Операционная система: Linux, macOS (POSIX-совместимые)
- Зависимости: FTXUI (подтягивается автоматически через CMake FetchContent)
# 1. Перейдите в директорию проекта
cd Text-User-Interface
# 2. Создайте директорию для сборки
mkdir build && cd build
# 3. Сконфигурируйте проект с помощью CMake
cmake ..
# 4. Скомпилируйте проект (используйте -j для параллельной сборки)
make -j$(nproc)
# 5. (Опционально) Установите в систему
sudo make installУбедитесь, что у вас установлены необходимые инструменты:
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install build-essential cmake git
# macOS (с Homebrew)
brew install cmakegit clone <repository_url>
cd Text-User-Interface# Создаём директорию для сборки
mkdir -p build
cd build
# Конфигурация CMake
cmake .. -DCMAKE_BUILD_TYPE=Release
# Компиляция (используем все доступные ядра)
make -j$(nproc)После успешной компиляции исполняемый файл будет находиться в build/log_analyzer:
./log_analyzer --help# Открыть лог файл
./log_analyzer /path/to/your/logfile.log
# Открыть с помощью установленной версии (если выполнили make install)
log_analyzer /var/log/syslogПосле запуска программы используйте следующие клавиши:
| Клавиша | Действие |
|---|---|
↑ / ↓ |
Навигация по строкам |
PgUp / PgDn |
Прокрутка страницами |
Home |
Переход к началу файла |
End |
Переход к концу файла |
H |
Переключить подсветку синтаксиса |
Q / Esc |
Выход из программы |
- После запуска программы начните вводить regex паттерн в поле "Filter"
- Фильтрация применяется автоматически в реальном времени
- Используйте стандартный синтаксис ECMAScript regex
# Найти строки с ошибками
ERROR|error|Error
# Найти IP адреса
\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b
# Найти JSON объекты
\{.*\}
# Найти SQL запросы
SELECT.*FROM
# Найти временные метки в формате ISO
\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}
# Найти HTTP коды ошибок
HTTP/\d\.\d"\s+[45]\d{2}# Открыть 10 GB лог файл
./log_analyzer /var/log/huge_application.log
# В интерфейсе введите фильтр для поиска ошибок:
# Фильтр: ERROR.*database
# Навигация и анализ найденных строкДля тестирования можно создать демонстрационный лог файл:
cat > test.log << 'EOF'
2025-01-27 10:00:01 INFO Starting application
2025-01-27 10:00:02 DEBUG Connecting to database at 192.168.1.100
2025-01-27 10:00:03 INFO SELECT * FROM users WHERE id = 42
2025-01-27 10:00:04 ERROR Connection timeout to 192.168.1.100
2025-01-27 10:00:05 INFO Retrying connection
2025-01-27 10:00:06 INFO {"status": "ok", "users": 150, "active": true}
2025-01-27 10:00:07 WARN High memory usage detected
2025-01-27 10:00:08 INFO INSERT INTO logs (message) VALUES ('test')
2025-01-27 10:00:09 ERROR Failed to INSERT: null constraint violation
2025-01-27 10:00:10 INFO Application stopped
EOF
# Запустить анализатор
./log_analyzer test.log- Открытие файла: мгновенное (O(1)) благодаря mmap
- Индексация строк: O(n), выполняется один раз при открытии
- Поиск по regex: O(n*m), где n - количество строк, m - сложность regex
- Память: используется только для индексов строк (~8 байт на строку)
- Memory-mapped I/O для нулевого копирования
- Асинхронная фильтрация в отдельном потоке
- MADV_SEQUENTIAL для оптимизации чтения ядром
- Компиляция с -O3 и -march=native
Text-User-Interface/
├── CMakeLists.txt # Конфигурация сборки
├── README.md # Документация
└── src/
├── main.cpp # Точка входа
├── log_reader.hpp # Интерфейс LogReader
├── log_reader.cpp # Реализация mmap и индексации
├── filter_engine.hpp # Интерфейс FilterEngine
├── filter_engine.cpp # Реализация regex фильтрации
├── syntax_highlighter.hpp # Интерфейс SyntaxHighlighter
├── syntax_highlighter.cpp # Реализация подсветки
├── tui_display.hpp # Интерфейс TUI
└── tui_display.cpp # Реализация FTXUI интерфейса
Убедитесь, что используете современный компилятор:
# Проверить версию GCC
g++ --version # Должна быть 9.0 или выше
# Проверить версию Clang
clang++ --version # Должна быть 10.0 или вышеПроверьте права доступа к файлу:
# Дать права на чтение
chmod +r /path/to/logfile.log
# Проверить, что файл существует
ls -lh /path/to/logfile.logВозможные причины:
- Недостаточно виртуальной памяти (проверьте
ulimit -v) - Слишком большой файл для архитектуры (32-bit системы ограничены 4GB)
Если CMake не может подтянуть FTXUI:
# Очистите кэш CMake и пересоберите
cd build
rm -rf *
cmake ..
make -j$(nproc)- POSIX-только: использует POSIX API для mmap (Linux, macOS)
- Только чтение: файлы открываются в режиме read-only
- Размер файла: теоретически до размера адресного пространства (обычно терабайты на 64-bit)
- Unicode: базовая поддержка UTF-8 (возможны проблемы с сложными символами)
Возможные улучшения:
- Windows поддержка (MapViewOfFile)
- Сохранение отфильтрованных результатов в файл
- Bookmarks для быстрого перехода
- Настраиваемые цветовые схемы
- Поддержка конфигурационных файлов
- Tail-режим для мониторинга в реальном времени
- Многоколоночный режим просмотра
MIT License
Разработано как высокопроизводительная утилита для анализа больших логов с использованием современных технологий C++.
При возникновении проблем:
- Проверьте раздел "Решение проблем"
- Убедитесь, что используете последнюю версию
- Проверьте, что все зависимости установлены корректно