Написал интерактивный TUI-дебаггер для логов на Python, потому что grep и tail меня достали
Каждый раз, когда на сервере падает очередное приложение да и не только, сценарий один и тот же: ты подключаешься по SSH, открываешь логи и дальше по накатанной, пытаясь выловить глазами нужную строчку ERROR среди мегабайтов INFO и DEBUG. Да, есть grep. Да, есть tail -f. Но когда падает гигантский traceback, читать его в стандартном выводе терминала — это отдельный мазохизм. Мне это надоело, и я написал TraceTUI — интерактивную консольную утилиту.
В чём была боль?
Обычно логи пишутся либо через стандартный logging, либо через модный loguru. Когда файлов несколько, приходится либо открывать кучу вкладок в терминале, либо городить сложные конструкции в bash. А если нужно быстро прыгать между ошибками и разворачивать traceback? Приходится постоянно скроллить консоль туда-сюда.
Что делает TraceTUI?
Я собрал интерфейс на базе библиотеки Textual и разбил его на три логические панели:
- Левая панель: Список источников. Можно натравить утилиту сразу на несколько лог-файлов и переключаться между ними стрелками ← / →.
- Центральная панель: Сам поток логов с автоматической подсветкой уровней (ошибки сразу горят красным, их видно за километр).
- Правая панель: Выбираешь строку с ошибкой, и справа красиво рендерится весь traceback, метаданные и теги. Больше никакой каши в консоли.
Главные фичи, ради которых всё и писалось:
- Автоопределение форматов: Программа сама понимает, где логи loguru, где стандартный logging, а где простой текст.
- Быстрый прыжок по ошибкам: Нажимаешь кнопку E (Next Error), и интерфейс сам перекидывает тебя к следующему варнингу или ошибке, пропуская тысячи строк обычного флуда.
- Интерактивный фильтр: По нажатию на F открывается поиск. Вбиваешь текст, и логи фильтруются на лету.
Как пощупать?
Проект полностью опенсорсный под MIT-лицензией. Ставится одной командой через pip:
Запустить можно просто передав файлы:
Буду рад, если утилита сэкономит вам пару сотен нервных клеток при следующем дебаге. Если есть идеи, чего не хватает пишите в комментарии, или на гитхаб в issues, косяки может ещё где то есть тоже важно если подметите.