Как найти исключения в лог-файлах с помощью командной строки

Ответ

Для поиска исключений и ошибок в логах из командной строки чаще всего используется утилита grep.

Основные команды:

  1. Поиск по нескольким ключевым словам Используйте флаг -i для поиска без учета регистра и | в качестве оператора "ИЛИ".

    # Искать строки, содержащие 'exception', 'error' или 'traceback'
    grep -i "exception|error|traceback" /path/to/your/logfile.log
  2. Поиск с отображением контекста Флаги -A (after), -B (before) и -C (context) показывают строки вокруг найденного совпадения, что помогает понять причину ошибки.

    # Показать 5 строк до и 5 строк после слова 'Exception'
    grep -B 5 -A 5 "Exception" /path/to/your/logfile.log
  3. Рекурсивный поиск по директории Флаг -r (recursive) позволяет искать во всех файлах внутри указанной директории.

    # Найти 'Traceback' во всех файлах в /var/log/
    grep -r "Traceback" /var/log/
  4. Вывод с подсветкой и номерами строк Для удобства анализа полезно подсвечивать найденные совпадения и видеть номера строк.

    # Искать 'error' с подсветкой (`--color=auto`) и номерами строк (`-n`)
    grep --color=auto -n -i "error" /path/to/your/logfile.log

Для более сложного анализа, например, для извлечения полных стектрейсов, grep можно комбинировать с awk, sed или perl.

Ответ 18+ 🔞

Ну что, программист уставший, опять эти логи разгребать, как дерьмо в сортире после фестиваля? Слушай сюда, я тебе сейчас такую шпаргалку впилю, что ты сам от себя офигеешь.

Вот, допустим, у тебя в логах пиздец и бардак, а найти надо только самое сочное — ошибки да исключения. Твой лучший друг тут — утилита grep. Запоминай, как молитву.

Основные приёмы, чтобы не облажаться:

  1. Поиск по всем закладкам сразу Допустим, тебе похуй, с большой или маленькой буквы написана ошибка. Искать надо и exception, и error, и этот ёбаный traceback. Делается так:

    # Ищешь всё подряд: exception, error или traceback. Флаг -i — это чтобы регистр не ебал мозг.
    grep -i "exception|error|traceback" /path/to/your/logfile.log

    Видишь эту палочку |? Это как оператор "ИЛИ". Либо одно, либо другое, либо всё сразу — чих-пых тебя в сраку, найдём!

  2. Поиск с предысторией и последствиями Нашёл строчку с Exception — и хуй поймёшь, что было до и что после. Для этого есть флаги контекста. Проще говоря, чтобы не быть как тот Герасим из рассказа — немым и тупым.

    # Показать 5 строк ДО и 5 строк ПОСЛЕ слова 'Exception'. Чтобы картина была, блядь, полная.
    grep -B 5 -A 5 "Exception" /path/to/your/logfile.log

    -B (before) — что было перед грехом. -A (after) — что случилось после. Овердохуище полезная штука.

  3. Рекурсивный поиск, или "А где, блядь, это записано?!" Когда не знаешь, в каком конкретно файле сокрыта истина, но знаешь папку (например, /var/log/), просто прочеши всё, как ментальная собака.

    # Найти 'Traceback' во ВСЕХ файлах внутри /var/log/ и во всех её подпапках.
    grep -r "Traceback" /var/log/

    Флаг -r (recursive) — твой пылесос в этом цифровом свинарнике.

  4. Красиво и по полочкам Чтобы глаза не ебало, когда смотришь на мегабайты текста, заставь grep подсветить найденное и показать номера строк. Элементарно, Ватсон!

    # Ищешь 'error', подсвечиваешь цветом и видишь, на какой оно строчке.
    grep --color=auto -n -i "error" /path/to/your/logfile.log

    --color=auto — красота, ёпта. -n — номер строки, чтобы сразу знать, куда тыкать.

А если совсем пиздец и нужно вытащить целый стектрейс, то одного grep мало. Тут уже надо, блядь, мозги включать и комбинировать с awk, sed или этим старым перлом. Но это уже, как говорится, совсем другая история, и терпения моего на неё уже ноль ебать.